100165613.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 192 行 · 第 1/3 页
HTM
192 行
<p class="MsoNormal"><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的每个新行都把自己的</span><span lang="EN-US">RowState</span><span style="FONT-FAMILY: 宋体">设置为</span><span lang="EN-US">Added</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">在对数据库进行修改前</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">这个示例先把记录清空</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">然后把下面的行添加到</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">以任何一种方式</span><span lang="EN-US">)</span><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-US">New row pending inserting into database</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1 Eastern Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 2 Western Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 3 Northern Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 4 Southern Unchanged</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> 999 North West Added</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">要在</span><span lang="EN-US">DataAdapter</span><span style="FONT-FAMILY: 宋体">中更新数据库,调用</span><span lang="EN-US">Update</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">da.Update(ds , "Region");</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17pt"><span style="FONT-FAMILY: 宋体">对于</span><span lang="EN-US">DataTable</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><span lang="EN-US">RegionInsert)</span><span style="FONT-FAMILY: 宋体">,</span><span style="FONT-FAMILY: 宋体">然后再次把</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的记录清空</span><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">New row updated and new RegionID assigned by database</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 1 Eastern Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 2 Western Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 3 Northern Unchanged</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 4 Southern Unchanged</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB"> 5 North West Unchanged</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17pt"><span style="FONT-FAMILY: 宋体">看看</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的最后一行。把代码中的</span><span lang="EN-US">RegionID</span><span style="FONT-FAMILY: 宋体">设置为</span><span lang="EN-US">999</span><span style="FONT-FAMILY: 宋体">,但在执行</span><span lang="EN-US">RegionInsert</span><span style="FONT-FAMILY: 宋体">存储过程后,该值改为</span><span lang="EN-US">5</span><span style="FONT-FAMILY: 宋体">,这是本例的目的<span style="LETTER-SPACING: -1pt">——</span></span><span style="LETTER-SPACING: -1pt"> </span><span style="FONT-FAMILY: 宋体">数据库会生成主键码,并且更新</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的数据。</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的数据更新是因为源代码中的</span><span lang="EN-US">SqlCommand</span><span style="FONT-FAMILY: 宋体">定义会把</span><span lang="EN-US">UpdatedRowSource</span><span style="FONT-FAMILY: 宋体">属性设置为</span><span lang="EN-US">UpdateRowSource.OutputParameters</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">SqlCommand aCommand = new SqlCommand("RegionInsert" , conn);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-GB"> </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB">aCommand.CommandType = CommandType.StoredProcedure;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB">aCommand.Parameters.Add(new SqlParameter("@RegionDescription" ,</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> SqlDbType.NChar , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 50 , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> "RegionDescription"));</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB">aCommand.Parameters.Add(new SqlParameter("@RegionID" , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> SqlDbType.Int, </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 0 , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> ParameterDirection.Output ,</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> false , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 0 , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> 0 , </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> "RegionID" , // Defines the SOURCE column</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> DataRowVersion.Default , </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-GB"> null));</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-GB">aCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17pt"><span style="FONT-FAMILY: 宋体">无论何时</span><span lang="EN-US">DataAdapter</span><span style="FONT-FAMILY: 宋体">执行这个命令,输出参数都应映射回数据行的源,在本例中是</span><span lang="EN-US">DataTable</span><span style="FONT-FAMILY: 宋体">中的一行,该标志说明了应更新什么数据<span style="LETTER-SPACING: -1pt">——</span></span><span style="LETTER-SPACING: -1pt"> </span><span style="FONT-FAMILY: 宋体">存储过程有一个输出参数映射回</span><span lang="EN-US">DataRow</span><span style="FONT-FAMILY: 宋体">,它应用的列是</span><span lang="EN-US">RegionID</span><span style="FONT-FAMILY: 宋体">,这是在命令定义中定义的。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17pt"><span lang="EN-US">UpdateRowSource</span><span style="FONT-FAMILY: 宋体">的值如表</span><span lang="EN-US">21-9</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p class="a5" style="MARGIN-TOP: 8.15pt"><a ftel="UpdateRowSource"><span style="FONT-FAMILY: 黑体">表</span><span lang="EN-US"> 21-9</span></a></p>
<div align="center">
<table class="MsoNormalTable" style="MARGIN-LEFT: 5.55pt; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; WIDTH: 126.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="168">
<p class="a2"><span lang="EN-US">UpdateRowSource</span><span style="FONT-FAMILY: 黑体">值</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 310.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="414">
<p class="a2"><span style="FONT-FAMILY: 黑体">说</span><span lang="EN-US"> </span><span style="FONT-FAMILY: 黑体">明</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 126.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="168">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">Both</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 310.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="414">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">存储过程可以返回输出参数和一个完整的数据库记录。这些数据源都用于更新源数据行</span></p>
</td>
</tr>
<tr>
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 126.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" width="168">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">FirstReturnedRecord</span></p>
</td>
<td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 0cm; WIDTH: 310.4pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="414">
<p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">该命令返回一个记录,该记录的内容应合并到最初的源</span><span lang="EN-US">DataRow</span><span style="FONT-FAMILY: 宋体">中,当给定的表有许多默认</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">或计算</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">列时,使用这个值很有用,<span style="LETTER-SPACING: -0.1pt">因为在执行插入语句之后,这些行需要与客户机上的</span></span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">DataRow</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">同步。例如</span><span lang="EN-US">INSERT (</span><span style="FONT-FAMILY: 宋体">列</span><span lang="EN-US">) INTO (</span><span style="FONT-FAMILY: 宋体">表</span><span lang="EN-US">) WITH (</span><span style="FONT-FAMILY: 宋体">主键码</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">SELECT (</span><span style="FONT-FAMILY: 宋体">列</span><span lang="EN-US">) FROM (</span><span style="FONT-FAMILY: 宋体">表</span><span lang="EN-US">) WHERE (</span><span style="FONT-FAMILY: 宋体">主键码</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。返回的记录应合并到源数据行上</span></p>
</td>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?