DataSet 更新 心得(转)

大家知道,DataSet保存的数据是位于服务器内存里面的原数据库的“副本”。所以用DataSet更新数据的过程就是先对“副本”进行更新,然后在将“原本”更新,按照我的理解就是把“原本”覆盖掉。具体到过程,首先是要找到需要更新的行,然后赋新值,最后更新原数据库。

要找到需要修改的行,比较方便的做法就是根据记录中的某个值进行查找,这样比用“列号”“行号”什么的方便多了。要做到这一点,首先就是要给数据库指定一个主键,然后即可按照主键进行查找。要注意的是这个主键必须要是在程序中指定的,并且这个主键不一定和你数据库原来有的主键一样。

然后就是最后的更新,当然是用DataAdapter的Update()方法借助CommandBuilder来实现,要注意的是,如果你的数据库一开始没有定义主键,那进行更新的时候会出错,返回的错误将是“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。”这是因为我们用的Update()实际上是通过CommandBuilder动态生成sql语句,然后才进行的数据库操作。但如果你在一开始创建DataAdapter时的那个sql语句没有包含有主键的列的话,那CommandBuilder将不会发生作用。这一点是必须要牢记的。

说了这么多,如果有不明白的就看下面的程序,这个是我练习时写的,里面有一些个人的设定,比如记录名什么的,相信大家一看就明白。

<%@import namespace="System.Data"%>
<%@import namespace="System.Data.OleDb"%>
<script language="c#" runat="server">
//定义处理更新的方法
//因为是简单示例,所以这个程序已经简化,直接进行更新
//这里有两个参数,第一个用来查找需要更新的行,第二个是要修改的值
private void up_date(int ids,string names){
//连接字符串,不明白的可以看本专题第二篇文章
string connstr=ConfigurationSettings.AppSettings["color"];
OleDbConnection conn=new OleDbConnection(connstr);
string sql="select * from member";
OleDbDataAdapter ada=new OleDbDataAdapter(sql,conn);//建立一个DataAdapter对象
//这里的CommandBuilder对象一定不要忘了,一般就是写在DataAdapter定义的后面
OleDbCommandBuilder cb=new OleDbCommandBuilder(ada);
DataSet ds=new DataSet();//建立DataSet对象
conn.Open();//打开连接
ada.Fill(ds,"mems");//填充DataSet
conn.Close();//注意及时关闭连接
DataTable dt=ds.Tables["mems"];//建立一个DataTable对象,方便操作
dt.PrimaryKey=new DataColumn[]{dt.Columns["id"]};//建立一个主键
DataRow dr=dt.Rows.Find(ids);//根据参数查找到需要修改的行
dr["name"]=names;//对需要修改的记录赋新值
ada.Update(ds,"mems");//用DataAdapter的Update()方法进行数据库的更新
}
//定义用来响应按钮单击事件的方法
private void b1_Click(object sender,System.EventArgs e){
if(Page.IsValid){
int ids=Int32.Parse(idst.Text);//取得要修改的行的id值,并转换成int类型
string names=namest.Text;//取得新值
up_date(ids,names);//调用我们定义的方法处理
lb1.Text="ok!";
</script><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用dataset更新记录</title>
</head>
<body>
<asp:Label id="lb1" runat="server"/>
<form runat="server">
<asp:TextBox id="idst" runat="server"/>
<asp:RequiredFieldValidator id="rfv1" ControlToValidate="idst" ErrorMessage="error!" runat="server"/>
<asp:TextBox id="namest" runat="server"/>
<asp:RequiredFieldValidator id="rfv2" ControlToValidate="namest" ErrorMessage="error!" runat="server"/>
<asp:Button id="b1" Text="here!!" OnClick="b1_Click" runat="server"/>
</form>
</body>
</html>

posted on 2012-02-17 13:54 SunCoder 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/SunCoder1/archive/2012/02/17/2355685.html

DataSet 更新 心得(转)相关推荐

  1. 使用 DataAdapter 和 DataSet 更新数据库

    DataAdapter 的 Update 方法:将 DataSet 中的更改解析回数据源.DataSet保存的数据是位于服务器内存里面的原数据库的"副本".所以用DataSet更新 ...

  2. Enterprise Library 4.1数据访问应用程序块快速入门【6】使用DataSet更新数据库

    本演练演示如何使用DataSet更新数据库.它假定以下存储过程已在被引用的数据库中被创建. CREATE PROCEDURE AddProduct (     @ProductName nvarcha ...

  3. 使用dataadapter和dataset更新数据库

    DataAdapter   的 Update 方法可调用来将 DataSet 中的更改解析回数据源.与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对 ...

  4. linux虚拟磁盘服务,迅闪Linux虚拟磁盘 使用超级IP更新心得

    今天帮朋友调试了一下讯闪虚拟磁盘Linux服务器,在此写点关于使用超级IP更新的心得. 登录Linux服务器的Web管理页面,输入超级IP,比如我这里输入的是192.168.0.100. 这里需要注意 ...

  5. 用SqlDataAdapter.Update(DataSet Ds)更新数据库

    一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库. 1. DbDataAdapter调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应 ...

  6. Asp.net 用DataSet对象更新数据(SqlDataAdapter) DataTable加主键

      私の青い色スペース 专注于.NET,认真把握好生命的每一秒,让每天都过的有意义..!     常用链接 我的随笔 我的评论 我参与的随笔 留言簿(1) 给我留言 查看公开留言 查看私人留言 我参与 ...

  7. ADO.NET 快速入门(四):从数据库填充 DataSet

    从数据库获取数据很容易,处理数据更容易.如果想要从数据库获取只进.只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它.关于如何使用 DataReader,请参考:使用 OLE D ...

  8. Sqlite中Sql_server四种执行ExecuteReader、ExecuteNonQuery、ExecuteScalar、DataSet.docx的方法实例

    SqlDataAdapter使用Fill方法填充DataSet SqlDataAdapter使用Fill方法填充DataSet string connString = System.Configura ...

  9. 一个OleDbDataAdapter是否可以负责多张表的更新

    当DataSet中包含主/子表时,Update更新步骤: (http://blog.csdn.net/chengking/archive/2005/10/03/494717.aspx) (一) 说明 ...

最新文章

  1. 玩转百度即用API(2)——身份证查询
  2. 程序员的岗位方向和所需技能都有哪些?
  3. ios10申请权限以及弹出允许使用数据框
  4. Tesseract-OCR引擎 入门
  5. 阿里巴巴有一群全年无休从不领工资的高智商员工
  6. 无线覆盖项目地勘——无线地勘记录
  7. Jenkins环境搭建总结
  8. 利用深度学习方法进行情感分析以及在海航舆情云平台的实践
  9. C语言试题七十六之请编写函实现百钱买百鸡
  10. 程序员,你还在 Select * 吗?
  11. lasso回归_一文读懂线性回归、岭回归和Lasso回归
  12. windows server 2003 IIS下配置PHP
  13. labview获取窗口句柄_API---如何获得窗口句柄(HWND)
  14. carbon----代码美化工具
  15. 合并集合 {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}运算的结果:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}
  16. uni-app实现实时获取当前时间日期
  17. 睡眠质量不好怎么改善,几个助眠好物帮助你睡安稳觉
  18. 2019CISCN web题赛-JustSoSo;love_math(复现)
  19. 【APP本地化】提高APP下载量的 5 个技巧
  20. 【新星计划】Demo---Expanding Cards------ 1/50(详解)

热门文章

  1. a4如何打印双面小册子_怎样将十几几十页的长文件文档打印成A4纸对折的小册子?...
  2. Order By后产生NULL的问题
  3. SparkSql引起的一场灾难
  4. IQA+不懂︱图像清洗:图像质量评估(评估指标、传统检测方法)
  5. [NLP]OpenNLP词形还原器(Lemmatizer)的使用
  6. cognos transformer 建一个85w数据的cube所用的时间,接优化
  7. Apache OpenNLP下载
  8. jenkins插件开发
  9. SpringBoot中如何优雅的使用拦截器
  10. Oracle的DBV工具