﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-飘着的叶子，什么时候才落地-文章分类-SQL</title><link>http://www.cnitblog.com/piaoye12345/category/1476.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 18:31:01 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 18:31:01 GMT</pubDate><ttl>60</ttl><item><title>DataSet的增加、修改、删除</title><link>http://www.cnitblog.com/piaoye12345/articles/4970.html</link><dc:creator>萌芽的叶子</dc:creator><author>萌芽的叶子</author><pubDate>Mon, 28 Nov 2005 08:37:00 GMT</pubDate><guid>http://www.cnitblog.com/piaoye12345/articles/4970.html</guid><wfw:comment>http://www.cnitblog.com/piaoye12345/comments/4970.html</wfw:comment><comments>http://www.cnitblog.com/piaoye12345/articles/4970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/piaoye12345/comments/commentRss/4970.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/piaoye12345/services/trackbacks/4970.html</trackback:ping><description><![CDATA[我们这一节主要计论如何使用DataSet，在数据库中增加、修改、删除一个数据。
<P>首先我们需要打开一个联结，我们的数据库还是用上一节的吧：）</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">string </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyConnString</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> = "Driver={Microsoft Access Driver (*.</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">mdb</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">)}; </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">DBQ</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">=c:/test/</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">test.mdb</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">;";<BR>string </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">strComm</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> = "select * from </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">UserList</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">";<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">ADOConnection</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyConnection</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> = new </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">ADOConnection(MyConnString</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">);<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">ADODataSetCommand</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyComm</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> = new </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">ADODataSetCommand(strComm,MyConnection</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">);</SPAN></P>
<P>这里我们为了讲解方便，只在DataSet存入一个表的内容:</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">DataSet</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> = new </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">DataSet</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">();<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyComm.FillDataSet(MyDataSet,"UserList</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">");</SPAN></P>
<P>此时我们就获得了一个拥有UserList表数据的DataSet。在讲解DataSet之前，我们还需要了解DataSet的结构下面是DataSet的结构树</P>
<UL>
<LI><B>DataSet </B>
<UL><B>RelationsCollection</B></UL>
<UL><B>ExtendedProperties</B></UL>
<UL>
<LI><B>TablesCollection 　</B> 
<UL>
<LI><B>DataTables</B> 
<LI>　 
<UL><B>Rows</B></UL>
<UL><B>Columns</B></UL>
<UL>其它</UL></LI></UL></LI></UL></LI></UL>
<P>由于我们研究的是DataTable，其它的我们暂时不管他们。一个DataSet中包含多个DataTable,一个DataTable又包含有多个Row，这就是我们操作DataSet的基础啦：）</P>
<P><B><FONT color=#0000ff>添加数据</FONT></B></P>
<P>添加一数据，从上面的列表中我们可以看出，其实就是添加一行Row，这里我们也来演示一下如何添加一行数据，我们程序一切以DataSet为顶点，呵呵，如果TablesCollection,RowsCollection下去的话，还有一些烦人的dt.AcceptChanges这些方法的调用，很烦人，还是一次搞定吧。</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">DataRow</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00"> </SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">dr</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">=</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet.Tables["UserList"].NewRow</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">();<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">dr["UserName</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"] = "周讯";<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">dr["ReMark</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"] = "100";<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">dr["Comment</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"] = "漂亮MM"；<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet.Tables.Rows.Add(dr</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">);</SPAN></P>
<P>第一行，我们建立一个新的数据行，它用来储存我们新加入的数据。然后我们在这个数据行中加入我们需要的数据。dr["UserName"]表明是对UserName字段进行添加，你可以使用dr[1]来添加信息，但是这需要我们事先知道字段在数据表的位置，而且在不知道数据表结构的情况很难知道我们添加的数据的对应情况，所以还是用字段名为好。</P>
<P>最后我们使用RowsCollection的Add方法，将我们新建这一行加入到数据表中。</P>
<P><B><FONT color=#0000ff>修改数据</FONT></B></P>
<P>知道如何添加数据后，修改数据也是很简单的事情了.</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet.Tables["UserList</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"].Rows[0]["</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">UserName</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"]="飞刀大哥";</SPAN></P>
<P>这样我们就修改了第一行数据中的UserName字段。</P>
<P><B><FONT color=#0000ff>删除数据</FONT></B></P>
<P>删除数据，主要是使用RowsCollection提供的Delete方法，看下面的程序也是很简单的事情啦：）</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet.Tables["UserList</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">"],Rows[0].Delete();</SPAN></P>
<P>这一行数据就已经被删除了。</P>
<P><B><FONT color=#0000ff>恢复数据</FONT></B></P>
<P>有时候我们添加/修改数据会出现错误，这时候，就需要恢复原来的数据。下面的程序，显示如何判断是否有错误发生：</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">if(MyDataSet.HasErrors</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">)<BR>{<BR></SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">MyDataSet.RejectChanges</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">();<BR>}<BR>　</SPAN></P>
<P>首先我们检查DataSet中是否有错误发生，如果有就使用RejectChanges()方法，恢复DataSet中的数据。注意这里恢复是在DataSet中所有表以及表中DataRow中的数据，也就是在此交次操作的数据全部恢复。如果我们只需要恢复部分内容，我们可以使用DataTable或DataRow的RejectChanges()，这里就不详细讲解了，使用方法和DataSet一样，只是操作的对像不同而已。</P>
<P><B><FONT color=#0000ff>探测DataSet是否有改动</FONT></B></P>
<P>我们在将DataSet送交给数据库去保存去，我们需要看看这个DataSet是否已经被改动了。如果没有改动，我们也就没有必要去修改数据库了。</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">if(MyDataSet.HasChanges</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">)<BR>{<BR>&nbsp;&nbsp;&nbsp; //保存<BR>}else{<BR>&nbsp;&nbsp;&nbsp; //不进行任何操作<BR>}</SPAN></P>
<P><B><FONT color=#0000ff>更新数据库</FONT></B></P>
<P>我们上面的操作，都只是针对DataSet的，没有操作数据库，但是我们的目的还是要将数据保存到数据中去，所以我们这里就需要调用DataSetCommand的Update方法。下面的程序显示如何将DataSet的数据交给数据库。</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">MyComm.Update(MyDataSet</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">);</SPAN></P>
<P>很简单的一句，呵呵。这里要注意，如果一个DataSet中包含有多个表，而我们只更新一个，那我们就必须写明更新的数据表名：</P>
<P><SPAN style="BACKGROUND-COLOR: #ffff00">MyComm.Update(MyDataSet,"UserList</SPAN><SPAN style="BACKGROUND-COLOR: #ffff00">");</SPAN></P>
<P>当Update方法被调用后，DataSetCommand会将数据库中的数据与DataSet中的数据相比较，对不相同的地方进行更新。</P>
<P>对于DataSet的操作，我们这里只讲这么多，其实DataSet的方法和属性有很多，功能也很全，我想现在这里的所讲的功能，对一般的操作已经足够了。</P><img src ="http://www.cnitblog.com/piaoye12345/aggbug/4970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/piaoye12345/" target="_blank">萌芽的叶子</a> 2005-11-28 16:37 <a href="http://www.cnitblog.com/piaoye12345/articles/4970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>