Access 标准表达式中数据类型不匹配问题
做项目中,在更新数据时老是报异常,很是纠结. 调试的时报错为:"标准表达式中数据类型不匹配"
查了很多资料终于找到原因是因为Access数据解析参数时的问题
举例说明:
View Code
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)};
这样的代码在sql运行是没有问题的,但是在Access中就会报错
假设数据库中没有日期类型,只有字符串和自动增长列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;