解决在Access中参数化SQL语句更新数据库失败的问题
2011-05-23 16:32
381 查看
Access数据库真是一个古董数据库,它的SQL语句语法跟标准的SQL server的SQL语句有许多不同之处(例如Access中是用#包括日期参数,其它数据库是用单引号包括日期参数).最近又发现了一个问题:在Access中参数化SQL更新数据库总是失败!认真检查了,没有任何语法错误,看下面代码:
后来请教别人才知道,Access数据库参数化SQL语句竟然要求非常严格的?!SQL语句里的参数顺序要跟程序代码里调用的顺序是完全一致!就如我上面举的代码例子,参数CompanyId是第一个加入了Parameter列表中,但是在它SQL语句中的位置是最末端(where CompanyId=@CompanyId),因此我们这样执行语句就不正确了,执行后的影响条数总是0.
解决方案是,将红色语句删掉,留下绿色语句,执行就正确了.
后来请教别人才知道,Access数据库参数化SQL语句竟然要求非常严格的?!SQL语句里的参数顺序要跟程序代码里调用的顺序是完全一致!就如我上面举的代码例子,参数CompanyId是第一个加入了Parameter列表中,但是在它SQL语句中的位置是最末端(where CompanyId=@CompanyId),因此我们这样执行语句就不正确了,执行后的影响条数总是0.
解决方案是,将红色语句删掉,留下绿色语句,执行就正确了.
/// <summary> /// 更新一条数据 /// </summary> public void Update(Company model) { StringBuilder strSql = new StringBuilder(); strSql.Append("update t_Company set "); strSql.Append("CompanyName=@CompanyName,"); strSql.Append("Address1=@Address1,"); strSql.Append("Address2=@Address2,"); strSql.Append("Address3=@Address3,"); strSql.Append("Address4=@Address4,"); strSql.Append("FacSimile=@FacSimile,"); strSql.Append("Website=@Website,"); strSql.Append("Origin=@Origin,"); strSql.Append("CreateDate=@CreateDate"); strSql.Append(" where CompanyId=@CompanyId "); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "CompanyId", DbType.Int32, model.CompanyId); db.AddInParameter(dbCommand, "CompanyName", DbType.AnsiString, model.CompanyName); db.AddInParameter(dbCommand, "Address1", DbType.AnsiString, model.Address1); db.AddInParameter(dbCommand, "Address2", DbType.AnsiString, model.Address2); db.AddInParameter(dbCommand, "Address3", DbType.AnsiString, model.Address3); db.AddInParameter(dbCommand, "Address4", DbType.AnsiString, model.Address4); db.AddInParameter(dbCommand, "FacSimile", DbType.AnsiString, model.FacSimile); db.AddInParameter(dbCommand, "Website", DbType.AnsiString, model.Website); db.AddInParameter(dbCommand, "Origin", DbType.AnsiString, model.Origin); db.AddInParameter(dbCommand, "CreateDate", DbType.DateTime, model.CreateDate); //db.AddInParameter(dbCommand, "CompanyId", DbType.Int32, model.CompanyId); db.ExecuteNonQuery(dbCommand); }
相关文章推荐
- 解决PLSQL导入表sql语句错误问题:ORA-01119:创建数据库文件时失败 ORA-27040::文件创建错误,无法创建文件
- 解决 JMeter 中 SQL 语句参数化的问题
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- 伪知识之了解数据库中备份集中的数据库备份与现有的数据库问题的解决方式持续更新:【内向即失败--王奕君】
- 解决pl/sql devloper 中数据库操作语句中文乱码的问题
- 解决 JMeter 中 SQL 语句参数化的问题
- 如何解决在.Net中用Sql语句向SqlServer数据库中插入特殊字符失败的问题?
- ACCESS模糊查询like的解决方法&&SQL查询语句通配符问题
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- 解决pl/sql devloper 中数据库操作语句中文乱码的问题
- 用Sql解决数据库并发更新问题
- ACCESS模糊查询like的解决方法&&SQL查询语句通配符问题
- 数据库性能优化分析案例---解决SQL语句过度消耗CPU问题
- SQL附加数据库失败问题的解决方法
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- html显示数据库中的字段内容为sql语句时,出现隐藏了换行等字符的问题解决
- asp + Access 常见的数据库访问失败问题 Microsoft JET Database Engine 错误 '80004005' 解决办法
- asp + Access 常见的数据库访问失败问题 Microsoft JET Database Engine 错误 '80004005' 解决办法
- Linq-to-Sql中更新数据库失败的解决办法