Access用OleDbParameter无法更新数据解决方案
昨天遇到了一个非常郁闷的问题,这个问题我几乎花了一天的时间才找到了造成问题的症结并解决。
问题是这样,原本一个使用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无法更新数据解决方案的更多相关文章
- TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)
此问题出现的原因: 服务器时间比本地时间大.由于TFS源代码的Source Control会根据签入时间做判断.如果后续签入的时间小于变更集的最新版本的时间,就会报错误“TF54000”,并拒绝签入. ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案
作者 王枫发布于2014年2月19日 综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个 ...
- 转:浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案
综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个时代决胜未来的关键因素,而基于大数据的 ...
- C/S应用升级更新完整解决方案
年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...
- MongoDB + Spark: 完整的大数据解决方案
Spark介绍 按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎. 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及 ...
- mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题
问题: mongoose 更新数据时不验证数据(忽略设定的集合规则)的问题 参考: http://www.mongoosejs.net/docs/api.html#updateone_updateOn ...
- C#使用ListView更新数据出现闪烁解决办法
C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候,更新里面的部分代码时候出现闪烁的情况 如图: 解决以后: 解决办法使用双缓冲:添加新类继承ListView ...
- flask+sqlite3+echarts3+ajax 异步更新数据
结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...
随机推荐
- Visual Studio 2017 远程调试(Remote Debugger)应用
I.远程调试情景 项目部署在远程服务器或非本地环境中,需要 处理应用中遇到的一些错误时 (不能直接附加进程或F5调试应用). II. 远程调试准备 1.远程服务器--操作系统和硬件要求 MSDN 操作 ...
- FusionChart实现柱状图、饼状图的动态数据显示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Vue学习笔记:Ref的使用
官网上的说明 1.了解Vue中的$refs在Vue中是怎么访问到DOM元素的 <div id="app"> <h1>{{ message }}</h1 ...
- [javaSE] GUI(鼠标事件)
调用Button对象的addMouseListener方法,参数:MouseListener对象,这个类是个接口,需要实现以下方法 mouseClicked mousePressed mouseRel ...
- MySQL一查就会
Table1--mysql常用操作 主题 用例 说明 书写规范 数据库和表的名称不一定要大写. 输入文本类型的数据时都要加上单引号: NULL 表示未定义,它不会等于另一个NULL: 不要使用双引号. ...
- Bzoj3197: [Sdoi2013]assassin
题面 传送门 Sol 套路:找出重心,如果有两个就新建一个点 然后把这棵树hash一下 设\(f[i][j]\)表示第一颗树到\(i\)第二棵树到\(j\),子树\(i,j\)同构的付出的最小代价 转 ...
- 浏览器根对象window之窗体和工具条
1. 窗体和工具条 1.1 窗体 frames.self.window.parent.top.opener. frames 数组类型,页面中iframe的引用,如果页面有2个iframe,则frame ...
- 我为什么用docker-compose来打包开发环境
BUILD, SHIP, RUN Docker is the world's leading software containerization platform Docker的出现,让虚拟技术更上一 ...
- Two ways to assign values to member variables
setXxx()方法,带参数的构造方法.类名作为形式参数,其实里面需要传入一个该类的对象.类名作为返回值,其实返回的是一个该类的对象.
- Azure Linux 虚拟机常见导致无法远程的操作
对Azure虚拟机的一些操作可能会导致无法远程连接,本文罗列了以下导致不能远程连接的场景: 场景1 - 在虚拟机配置IP地址或MAC地址 场景2 - 错误地修改服务的配置文件 场景3 - 误设置防火墙 ...