22.3.4 更新数据源
应用程序已经从数据库中选择了数据,本节将说明把数据的改变返回至数据库。如果您按照上一节的步骤进行,就应得到一个包含连接、DataAdapter和DataSet对象的应用程序。剩下的就只是把DataSet和DataGrid联系起来,添加一些逻辑,以从数据库中检索数据并显示它们,然后把数据的改变返回至数据库。
图22-23显示了这个示例的窗体,它基于UpdatingData示例代码。

图 22-23
该窗体包含一个DataGrid控件和两个按钮。当用户单击Retrieve按钮时,就执行下述代码:
private void retrieveButton_Click(object sender, System.EventArgs e)
{
//Fill the data adapter from the database
supplierDataAdapter1.Fill (supplierDataSet , "Supplier") ;
//And display the data in the data grid…
dataGrid1.SetDataBinding (supplierDataSet , "Supplier") ;
//And disable the retrieve button…
retrieveButton.Enabled = fasle;
}
这段代码利用前面创建的DataAdapter(从Server Explorer拖放一个数据库表)填充DataSet。我们填充了Supplier数据表和数据库中的所有记录。接着调用SetDataBinding(),在屏幕上显示这些记录。
在浏览了数据,进行了一些修改后,就可以单击Update按钮,执行如下代码:
private void updateButton_Click(object sender, System.EventArgs e)
{
//Update the database
int modified = supplierDataAdapter.Update(supplierDataSet, " Supplier" ) ;
if (modified > 0)
MessageBox.Show9 string.Format ("Modified {o} rows" , modified));
}
这段代码也是很简单的,因为DataAdapter完成了大部分工作。Update()方法迭代DataSet被选中的表中的数据,在数据库上对每个修改执行相应的SQL语句,注意这个方法返回一个int型的值,这是Updata()方法所修改的行数。这个示例利用这个数字显示被修改的行数。
第21章详细讨论了DataAdapter的使用,简言之,它代表了SELECT、INSERT、UPDATE和DELETE操作的SQL语句。当调用Update()方法时,它对每个已修改的行执行相应的语句,这会使所有已修改的行执行UPDATE语句,所有已删除的行执行DELETE语句等。所执行的命令在默认情况下都是简单的SQL语句。还可以创建相应的命令对象,把它们赋予DataAdapter的属性,从而使用存储过程。
如果要利用存储过程的所有优点,但没有时间编写自己的存储过程,可以使用Visual Studio .NET向导。从DataAdapter的关联菜单中,选择Configure Data Adapter菜单项,就会显示一个Configuration向导,在其中选择DataAdapter的数据源,如图22-24所示。
在选择Create new stored procedures后,单击Next,就进入自动为SELECT、INSERT、UPDATE和DELETE语句生成新存储过程的向导页面,最后修改项目中生成的代码,添加对这些存储过程的调用,而不是直接调用SQL语句。
除了生成新的存储过程外,还可以选择现有的存储过程,填充DataAdapter上的4个SQL命令。当手工编写的存储过程已经可以使用时,或者存储过程执行其他一些函数(例如审查改变或更新链接的记录等)时,这种方式是很有效的。

图 22-24





