——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
前面讨论数据行的一节简要介绍了SqlDataAdapter类使用该类的代码如下所示
string select = SELECT ContactNameCompanyName FROM Customers;
SqlConnection conn = new SqlConnection(source);
SqlDataAdapter da = new SqlDataAdapter(select conn);
DataSet ds = new DataSet();
daFill(ds Customers);
突出显示的两行代码显示了SqlDataAdapter类—— 其他数据适配器在功能上实际上与SqlDataAdapter是完全相同的
数据适配器类都派生于同一个基类而不是一组接口其他数据库类也是这样继承结构如下所示
SystemDataCommonDataAdapter
SystemDataCommonDbDataAdapter
SystemDataOdbcOdbcDataAdapter
SystemDataOleDbOleDbDataAdapter
SystemDataOracleClientOracleDataAdapter
SystemDataSqlClientSqlDataAdapter
为了把数据插入到DataSet中需要执行某种形式的命令以选择该数据该命令可以是SQL SELECT语句一个存储过程的调用或者是TableDirect命令(用于OleDb提供程序)上面的示例使用了SqlDataAdapter的一个构造函数把传送过来的SQL SELECT子句转换为一个SqlCommand在适配器上调用Fill方法时执行这个命令
在本章前面的存储过程示例中定义了INSERTUPDATE和DELETE命令但没有给出一个SELECT过程本节介绍该过程并说明如何从SqlDataAdapter上调用存储过程把数据填充到DataSet中
在数据适配器上使用存储过程
首先需要定义一个存储过程 SELECT存储过程如下所示
CREATE PROCEDURE RegionSelect AS
SET NOCOUNT OFF
SELECT * FROM Region
GO
这个存储过程可以直接输入到SQL Server查询分析器中或者可以运行这个示例所使用的StoredProcsql文件
接着需要定义一个执行该存储过程的SqlCommand这段代码非常简单并且大部分已经在前面执行命令的一节中介绍过了
private static SqlCommand GenerateSelectCommand(SqlConnection conn )
{
SqlCommand aCommand = new SqlCommand(RegionSelect conn);
aCommandCommandType = CommandTypeStoredProcedure;
aCommandUpdatedRowSource = UpdateRowSourceNone;
return aCommand;
}
这个方法生成了一个SqlCommand该SqlCommand在执行时会调用RegionSelect过程最后是把这个命令和SqlDataAdapter类关联起来调用Fill方法
DataSet ds = new DataSet();
// Create a data adapter to fill the DataSet
SqlDataAdapter da = new SqlDataAdapter();
// Set the data adapters select command
daSelectCommand = GenerateSelectCommand (conn);
daFill(ds Region);
其中创建了一个新SqlDataAdapter把生成的SqlCommand赋给数据适配器的SelectCommand属性然后调用执行存储过程的Fill方法把返回的所有行插入到Region数据表中(在本例中它是由运行库生成的)
数据适配器不仅仅能通过执行命令来选择数据保存对数据集的修改一节会介绍数据适配器的其他功能