做项目中,在更新数据时老是报异常,很是纠结. 调试的时报错为:"标准表达式中数据类型不匹配"
查了很多资料终于找到原因是因为Access数据解析参数时的问题
举例说明:
View Code
这样的代码在sql运行是没有问题的,但是在Access中就会报错 strSql.Append("Update RoleInfo set "); strSql.Append("RoleName=@RoleName,Remark=@Remark,CreateDate=@CreateDate,Status=@Status"); strSql.Append("where Id=@Id"); OleDbParameter[] parameters = new OleDbParameter[]{ new OleDbParameter("@RoleName",model.RoleName), new OleDbParameter("@Remark",model.Remark), new OleDbParameter("@CreateDate",model.CreateDate), new OleDbParameter("@Status",model.Status), new OleDbParameter("@Id",model.Id)};
假设数据库中没有日期类型,只有字符串和自动增长列ID 的话,只要将条件语句改成下面这样就行了
View Code
strSql.Append("where Id="+model.Id);
如果存在日期类型话,建议将写法改写如下:
View Code
OleDbParameter[] parameters = { new OleDbParameter("@Id", OleDbType.Integer,4), new OleDbParameter("@RoleName", OleDbType.VarChar), new OleDbParameter("@Remark", OleDbType.VarChar), new OleDbParameter("@CreateDate", OleDbType.Date), new OleDbParameter("@Status", OleDbType.Integer,4)}; parameters[0].Value = model.Id; parameters[1].Value = model.RoleName; parameters[2].Value = model.Remark; parameters[3].Value = model.CreateDate; parameters[4].Value = model.Status;
这样的话基本上可以解决问题 ! 纠结了几个小时啊 ! 郁闷..........
原写法:
OleDbParameter param = new OleDbParameter();
param.ParameterName = "@CreateDate"; param.OleDbType = OleDbType.Date;param.Value = System.DateTime.Now;