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;

posted @ 2011-09-23 16:19  市丸炎九  阅读(1043)  评论(0编辑  收藏  举报