Access 标准表达式中数据类型不匹配问题

做项目中,在更新数据时老是报异常,很是纠结. 调试的时报错为:"标准表达式中数据类型不匹配"

查了很多资料终于找到原因是因为Access数据解析参数时的问题 

举例说明:

ContractedBlock.gif ExpandedBlockStart.gif 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 的话,只要将条件语句改成下面这样就行了

ContractedBlock.gif ExpandedBlockStart.gif View Code
strSql.Append("where Id="+model.Id);

 

如果存在日期类型话,建议将写法改写如下:

ContractedBlock.gif ExpandedBlockStart.gif 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;

转载于:https://www.cnblogs.com/dutdm/archive/2011/09/23/2186363.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值