——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
除了SqlDataAdapter最有可能包含的 SelectCommand之外还可以定义InsertCommand UpdateCommand 和 DeleteCommand顾名思义这些对象都是适用于相应提供程序的命令对象(例如SqlCommand 或 OleDbCommand)实例
有了这种灵活性后就可以自由调整应用程序对频繁使用的命令(例如select和insert)采用合适的存储过程来执行对不常使用的命令(例如delete)采用SQL命令的方式执行一般应为所有的数据库交互操作提供存储过程因为这会更快更容易调整
本节的示例重新使用调用存储过程一节中的存储过程插入更新和删除Region记录再把这些与上面编写的RegionSelect过程结合起来生成一个新示例这个示例使用这些命令来检索和更新DataSet中的代码代码的主体如下所示
插入一个新行
把新行添加到DataTable中有两种方式第一种方式是调用NewRow()函数返回一个空行然后向其填充数据最后把它添加到Rows集合中
DataRow r = dsTables[Region]NewRow();
r[RegionID]=;
r[RegionDescription]=North West;
dsTables[Region]RowsAdd(r);
第二种方式是把一组数据传送给RowsAdd()方法
DataRow r = dsTables[Region]RowsAdd
(new object [] { North West });
DataTable中的每个新行都把自己的RowState设置为Added在对数据库进行修改前这个示例先把记录清空然后把下面的行添加到DataTable中(以任何一种方式)注意右边一列显示行的状态
New row pending inserting into database
Eastern Unchanged
WesternUnchanged
Northern Unchanged
SouthernUnchanged
North WestAdded
要在DataAdapter中更新数据库调用Update方法
daUpdate(ds Region);
对于DataTable中的每一新行这将执行存储过程(在本例中是RegionInsert)然后再次把DataTable中的记录清空查看对数据库进行的修改
New row updated and new RegionID assigned by database
Eastern Unchanged
WesternUnchanged
Northern Unchanged
SouthernUnchanged
North WestUnchanged
看看DataTable中的最后一行把代码中的RegionID设置为但在执行RegionInsert存储过程后该值改为这是本例的目的—— 数据库会生成主键码并且更新DataTable中的数据DataTable中的数据更新是因为源代码中的SqlCommand定义会把UpdatedRowSource属性设置为UpdateRowSourceOutputParameters
SqlCommand aCommand = new SqlCommand(RegionInsert conn);
aCommandCommandType = CommandTypeStoredProcedure;
aCommandParametersAdd(new SqlParameter(@RegionDescription
SqlDbTypeNChar
RegionDescription));
aCommandParametersAdd(new SqlParameter(@RegionID
SqlDbTypeInt
ParameterDirectionOutput
false
[] []