博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Access 标准表达式中数据类型不匹配问题
阅读量:4697 次
发布时间:2019-06-09

本文共 1523 字,大约阅读时间需要 5 分钟。

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

查了很多资料终于找到原因是因为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

你可能感兴趣的文章