100165610.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 118 行
HTM
118 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
21.7.1 用数据适配器来填充 DataSet
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165610.htm">
21.7.1 用数据适配器来填充 DataSet
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165610.htm'><font color='red'>21.7.1 用数据适配器来填充 DataSet</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165607.htm'>21.5.4 数据约束</a></div><div style='float:right;width:49%'>·<a href='100165608.htm'>21.6 XML模式</a></div><div style='float:left;width:49%'>·<a href='100165609.htm'>21.7 填充数据集</a></div><div style='float:right;width:49%'>·<a href='100165611.htm'>21.7.2 从XML中给数据集填充数据</a></div><div style='float:left;width:49%'>·<a href='100165612.htm'>21.8 保存对数据集的修改</a></div><div style='float:right;width:49%'>·<a href='100165613.htm'>21.8.1 通过数据适配器进行更新</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text">
<div id="csdn_zhaig_ad_yahoo_2"></div>
<link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><span lang="EN-GB">21.7.1 </span><span style="FONT-FAMILY: 黑体">用数据适配器来填充</span><span lang="EN-GB"> DataSet</span></h3>
<p class="MsoNormal"><a ftel="SqlDataAdapter2"></a><a ftel="dataadapters"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">前面讨论数据行的一节简要介绍了</span></a><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">类,使用该类的代码如下所示:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">string select = "SELECT ContactName,CompanyName FROM Customers";</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">SqlConnection conn = new SqlConnection(source);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">SqlDataAdapter da = new SqlDataAdapter(select , conn);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">DataSet ds = new DataSet();</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">da.Fill(ds , "Customers");</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">突出显示的两行代码显示了</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">类<span style="LETTER-SPACING: -1pt">——</span></span><span style="LETTER-SPACING: -1pt"> </span><span style="FONT-FAMILY: 宋体">其他</span><span style="FONT-FAMILY: 宋体">数据适配器</span><span style="FONT-FAMILY: 宋体">在功能上实际上与</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">是完全相同的。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">数据适配器</span><span style="FONT-FAMILY: 宋体">类都派生于同一个基类,而不是一组接口,其他数据库类也是这样。继承结构如下所示:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">System.Data.Common.DataAdapter</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> System.Data.Common.DbDataAdapter</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> System.Data.Odbc.OdbcDataAdapter</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> System.Data.OleDb.OleDbDataAdapter</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> System.Data.OracleClient.OracleDataAdapter</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB"> System.Data.SqlClient.SqlDataAdapter</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">为了把数据插入到</span><span lang="EN-US">DataSet</span><span style="FONT-FAMILY: 宋体">中,需要执行某种形式的命令以选择该数据。该命令可以是</span><span lang="EN-US">SQL SELECT</span><span style="FONT-FAMILY: 宋体">语句,一个存储过程的调用,或者是</span><span lang="EN-US">TableDirect</span><span style="FONT-FAMILY: 宋体">命令</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">用于</span><span lang="EN-US">OleDb</span><span style="FONT-FAMILY: 宋体">提供程序</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。上面的示例使用了</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">的一个构造函数,把传送过来的</span><span lang="EN-US">SQL SELECT</span><span style="FONT-FAMILY: 宋体">子句转换为一个</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">,在适配器上调用</span><span lang="EN-US">Fill</span><span style="FONT-FAMILY: 宋体">方法时执行这个命令。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在本章前面的存储过程示例中,定义了</span><span lang="EN-US">INSERT</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">UPDATE</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">DELETE</span><span style="FONT-FAMILY: 宋体">命令,但没有给出一个</span><span lang="EN-US">SELECT</span><span style="FONT-FAMILY: 宋体">过程,本节介绍该过程,并说明如何从</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">上调用存储过程,把数据填充到</span><span lang="EN-US">DataSet</span><span style="FONT-FAMILY: 宋体">中。</span></p>
<h4 style="FTEL: 21.45pt"><span style="FONT-FAMILY: 黑体">在数据适配器上使用存储过程</span></h4>
<p class="MsoNormal"><a ftel="storedprocedures2"><span style="FONT-FAMILY: 宋体">首先需要定义一个存储过程,</span><span lang="EN-US"> SELECT</span></a><span style="FONT-FAMILY: 宋体">存储过程如下所示:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">CREATE PROCEDURE RegionSelect AS</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> SET NOCOUNT OFF</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> SELECT * FROM Region</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">GO</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个存储过程可以直接输入到</span><span lang="EN-US">SQL Server</span><span style="FONT-FAMILY: 宋体">查询分析器中</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">或者可以运行这个示例所使用的</span><span lang="EN-US">StoredProc.sql</span><span style="FONT-FAMILY: 宋体">文件。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">接着,需要定义一个执行该存储过程的</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">,这段代码非常简单,并且大部分已经在前面“执行命令”的一节中介绍过了:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">private static SqlCommand GenerateSelectCommand(SqlConnection conn )</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> SqlCommand aCommand = new SqlCommand("RegionSelect" , conn);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> aCommand.CommandType = CommandType.StoredProcedure;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> aCommand.UpdatedRowSource = UpdateRowSource.None;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> return aCommand;</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个方法生成了一个</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">该</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">在执行时会调用</span><span lang="EN-US">RegionSelect</span><span style="FONT-FAMILY: 宋体">过程。最后是把这个命令和</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">类关联起来</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">调用</span><span lang="EN-US">Fill</span><span style="FONT-FAMILY: 宋体">方法</span><span style="FONT-FAMILY: 宋体">:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">DataSet ds = new DataSet();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB">// Create a data adapter to fill the DataSet</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB">SqlDataAdapter da = new SqlDataAdapter();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB">// Set the data adapter's select command</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB">da.SelectCommand = GenerateSelectCommand (conn);</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">da.Fill(ds , "Region");</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">其中创建了一个新</span><span lang="EN-US">SqlDataAdapter</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">把生成的</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">赋给数据适配器的</span><span lang="EN-US">SelectCommand</span><span style="FONT-FAMILY: 宋体">属性</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">然后调用执行存储过程的</span><span lang="EN-US">Fill</span><span style="FONT-FAMILY: 宋体">方法</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">把返回的所有行插入到</span><span lang="EN-US">Region</span><span style="FONT-FAMILY: 宋体">数据表中</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">在本例中</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">它是由运行库生成的</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">数据适配器不仅仅能通过执行命令来选择数据,“保存对数据集的修改”一节会介绍数据适配器的其他功能。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165609.htm">上一页</a> <a href="index.html">首页</a> <a href="100165611.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165610.htm'><font color='red'>21.7.1 用数据适配器来填充 DataSet</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165607.htm'>21.5.4 数据约束</a></div><div style='float:right;width:49%'>·<a href='100165608.htm'>21.6 XML模式</a></div><div style='float:left;width:49%'>·<a href='100165609.htm'>21.7 填充数据集</a></div><div style='float:right;width:49%'>·<a href='100165611.htm'>21.7.2 从XML中给数据集填充数据</a></div><div style='float:left;width:49%'>·<a href='100165612.htm'>21.8 保存对数据集的修改</a></div><div style='float:right;width:49%'>·<a href='100165613.htm'>21.8.1 通过数据适配器进行更新</a></div></div>
</div>
</div>
</div>
<!-- 评论 -->
<!-- 今日推荐 -->
</div>
<!-- 页脚 -->
<div id="foot">
<img src="../../book/readbook.aspx@node=5610&bookid=16&bookname=21.7.1++_25d3_25c3_25ca_25fd_25be_25dd_25ca_25ca_25c5_25e4_25c6_25f7_25c0_25b4_25cc_25ee_25b3_25e4+DataSet" alt="" width="0" height="0" />
<style>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?