最近,用ACCESS做数据库,开发WINFORM程序.遇到了一个很烦恼的问题.
在数据库操作层,修改,插入语句,老是报 :"标准表达式中数据类型不匹配" 的错误.
因为数据安全问题,一直都用传参数的方式,不怎么好调试! 在网上看看,也没有找到好的解决方法.
最后自己测试了一下,发现:
文本+日期/时间 类型的,修改/插入 都没有问题.
如果是: 文本+数字+时间/日期 类型的,且同时出现2个时间/日期类型的.则出错.
最后受朋友的启示,改好了:
请注意,model.Create_date.ToString() 是DATE类型的,但是ACCESS,不知道为什么还需要先将DATE转换成字符类型
然后再Convert.ToDateTime这样转换一次.
呵呵,就这样了!
/// 插入一条记录
static public bool InsertPriceContent(PriceContent model)
{
try
{
int flag = 0;
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into BNSP_T_PRICE_CONTENT(");
strSql.Append("rule_id,price_model_id,regulation,parent_id,is_lowclass,is_autograde,is_total,create_user_id,create_date,update_user_id,update_date)");
strSql.Append(" values (");
strSql.Append("@rule_id,@price_model_id,@regulation,@parent_id,@is_lowclass,@is_autograde,@is_total,@create_user_id,@create_date,@update_user_id,@update_date)");
OleDbParameter[] oleDbParas = new OleDbParameter[] {
new OleDbParameter("rule_id", model.Rule_id)
,new OleDbParameter("price_model_id",model.Price_model_id)
,new OleDbParameter("regulation",model.Regulation)
,new OleDbParameter("parent_id",model.Parent_id)
,new OleDbParameter("is_lowclass",model.Is_lowclass)
,new OleDbParameter("is_autograde", model.Is_autograde)
,new OleDbParameter("is_total",model.Is_total)
,new OleDbParameter("create_user_id",model.Create_user_id)
,new OleDbParameter("create_date",Convert.ToDateTime(model.Create_date.ToString()))
,new OleDbParameter("update_user_id", model.Update_user_id)
,new OleDbParameter("update_date", Convert.ToDateTime(model.Update_date.ToString()))};
flag = acceDataProv.ExecuteNonQuery(strSql.ToString(), oleDbParas);
return Function.ReturnIsNull(flag);
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
}