昨天遇到了一个非常郁闷的问题,这个问题我几乎花了一天的时间才找到了造成问题的症结并解决。

问题是这样,原本一个使用Sqlserver数 据库的系统,我要让它实现Access数据接口,即我可以很方便地把这个系统从SqlServer数据库切换到Access数据库,由于此系统采用了抽象 工厂模式,只需增加一个Access数据库的接口层即可,我采用了DbHelperOleDb,然后写了OleDbDAL数据层接口。调试的时候,其它一 切顺利,我暗喜,觉得轻松搞定数据库接口层的转换很了不起,可是当我在后台更新数据的时候,没有出错,但就是数据无法更新,曾怀疑对数据库的权限操作问 题,但是插入和删除数据都是OK的,排除了这个可能,什么问题?我就在里面纠缠了很久,尝试了很多方式,走了不少弯路,问了不少人,百度谷歌了不少资料, 几乎花了一天的时间,在无意中,有一处数据更新终于成功了,但是我不知什么原因使得它终于成功了,但是它让我看到了胜利的曙光,我再研究了其它处不成功的 更新,并仔细查看不成功和成功更新的区别,天啊,原来问题就是在access数据库里面,OleDbParameter[]parameters ={}里面的参数是顺序是一定要按Update语句里面变量的顺序的,但是SqlServer数据库则没有这个要求!

下面把正确的写法贴出来,在网上也有不少朋友遇到过这样的问题,希望这个信息对他们有帮助。

特别注意的是,在 OleDbParameter[]parameters = {}数组里面参数的顺序一定要和Update语句里面的参数的顺序一致。

 /// <summary>
/// 更新一条数据
///</summary>
public voidUpdate(ZPY.Model.News model)
{
StringBuilderstrSql=new StringBuilder();
strSql.Append("updateNews set ");
strSql.Append("NewsTitle=@NewsTitle,");
strSql.Append("NewsContent=@NewsContent,");
strSql.Append("NewsFrom=@NewsFrom,");
strSql.Append("NewsTime=@NewsTime,");
strSql.Append("DefaultPic=@DefaultPic,");
strSql.Append("BigClassID=@BigClassID,");
strSql.Append("SmallClassID=@SmallClassID,");
strSql.Append("Hits=@Hits,");
strSql.Append("IsTop=@IsTop,");
strSql.Append("IsPass=@IsPass,");
strSql.Append("AddMan=@AddMan");
strSql.Append("where ID=@ID ");
OleDbParameter[]parameters = {
//注意里面参数的顺利一定要和Update语句里面参数是顺序一致,比如Update语句里面第一个参数 // 是@NewTitle,这里也是,Update语句里面最后一个参数是@ID,这样最后一个参数一定要是@ID
newOleDbParameter("@NewsTitle", OleDbType.VarChar,),
newOleDbParameter("@NewsContent", OleDbType.VarChar,),
newOleDbParameter("@NewsFrom", OleDbType.VarChar,),
newOleDbParameter("@NewsTime", OleDbType.Date),
newOleDbParameter("@DefaultPic", OleDbType.VarChar,),
newOleDbParameter("@BigClassID", OleDbType.Integer,),
newOleDbParameter("@SmallClassID", OleDbType.Integer,),
newOleDbParameter("@Hits", OleDbType.Integer,),
newOleDbParameter("@IsTop", OleDbType.Boolean,),
newOleDbParameter("@IsPass", OleDbType.Boolean,),
newOleDbParameter("@AddMan", OleDbType.VarChar,),
new OleDbParameter("@ID", OleDbType.Integer,),
}; parameters[].Value= model.NewsTitle;
parameters[].Value= model.NewsContent;
parameters[].Value= model.NewsFrom;
parameters[].Value= model.NewsTime;
parameters[].Value= model.DefaultPic;
parameters[].Value= model.BigClassID;
parameters[].Value= model.SmallClassID;
parameters[].Value= model.Hits;
parameters[].Value= model.IsTop;
parameters[].Value= model.IsPass;
parameters[].Value= model.AddMan;
parameters[].Value = model.ID; DbHelperOleDb.ExecuteSql(strSql.ToString(),parameters);
}

Access用OleDbParameter无法更新数据解决方案的更多相关文章

  1. TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)

    此问题出现的原因: 服务器时间比本地时间大.由于TFS源代码的Source Control会根据签入时间做判断.如果后续签入的时间小于变更集的最新版本的时间,就会报错误“TF54000”,并拒绝签入. ...

  2. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. 浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案

    作者 王枫发布于2014年2月19日 综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个 ...

  4. 转:浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案

    综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个时代决胜未来的关键因素,而基于大数据的 ...

  5. C/S应用升级更新完整解决方案

    年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...

  6. MongoDB + Spark: 完整的大数据解决方案

    Spark介绍 按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎. 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及 ...

  7. mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题

    问题: mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题 参考: http://www.mongoosejs.net/docs/api.html#updateone_updateOn ...

  8. C#使用ListView更新数据出现闪烁解决办法

    C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候,更新里面的部分代码时候出现闪烁的情况 如图: 解决以后: 解决办法使用双缓冲:添加新类继承ListView ...

  9. flask+sqlite3+echarts3+ajax 异步更新数据

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

随机推荐

  1. C# 程序执行时间差

    有时需要知道执行一个方法需要多少时间,这时会用到一个时间差TimeSpan DateTime startTime = DateTime.Now;//方法开始时间 //{ // 你需要测试的代码. // ...

  2. 七、并发容器ConcurrentHashMap

    一.简介 我们知道,HashMap是线程不安全的.而HashTable是线程安全的,但是JDK已经不建议使用HashTable,它已经被作为废除的实现. 在JDK并发包里面,ConcurrentHas ...

  3. Java中多个集合的交集,并集和差集

    一.交集 java中交集使用 A.retainAll(B) ,交集的结果在集合A中. import org.junit.Test; import java.util.HashSet; import j ...

  4. 常见IT英语单词

    lable标签,master精通.主人,reference参考,release发布,schema模式,component组件,persistence持久化,generate生成产生,plugin插件, ...

  5. Windows任务计划向远程服务器拷贝文件,报登录失败: 未知的用户名或错误密码

    问题产生很奇怪,当你登录到系统时,执行自动化作业是正常 但到了晚上凌晨自动执行作业时,则报登录失败: 未知的用户名或错误密码 解决方案: 在拷贝脚本中加及一行,创建net use 命名,每次文件拷贝前 ...

  6. Hibernate 注解(Annotations 四)多对多双向注解

    注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来 ...

  7. 手写堆优化dijkstra

    \(dijkstra\) 算法的堆优化,时间复杂度为\(O(n+m)\log n\) 添加数组\(id[]\)记录某节点在堆中的位置,可以避免重复入堆从而减小常数 而这一方法需要依托手写堆 #incl ...

  8. 洛谷P3384 树链剖分

    如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x ...

  9. 简单的sqlserver批量插入数据easy batch insert data use loop function in sqlserver

    --example 1: DECLARE @pid INT,@name NVARCHAR(50),@level INT,@i INT,@column2 INT SET @pid=0 SET @name ...

  10. JavaScript的进阶之路(五)理解数组1

    数组是值得有序结合,每个值叫做一个元素,每个元素的位置称为索引,索引从0开始. 在JavaScript中,数组是对象的特殊形式.继承自Array.prototype中的属性,有丰富的数组操作方法. 通 ...