ADONET有两个重要组成部分即DataSet和NET数据提供者在前几节的例子中已经使用了DataSet和SqlDataAdapter可能读者对这些类还不熟悉本文将进行详细介绍
NET数据提供对象分为三类包括SQL数据提供者OLE DB数据提供者和ODBC数据提供者其中SQL数据提供者仅支持SQL Server及更高版本OLE DB数据提供者支持AccessOracle和SQL Server等ODBC数据提供者支持的类型较多分别包括AccessOracleSQL ServerMySql和VFP(Visual FoxPro)等
在NET数据提供者中定义的对象前面必须带有该提供者的标志如上一节使用的SqlDataAdapter因为它定义在SQL数据提供者内所以要加前缀Sql在另两个数据提供者内一般加前缀OleDb和Odbc
NET数据提供者的对象包括ConnectionCommandCommandBuilderDataReader和DataAdapter
下面通过例子对以上对象进行说明
()打开VS在D:\C#\ch目录下建立名为ProviderTest的Windows应用程序
()打开工程为当前窗体添加一个TextBox和一个非类型化的DataSet从工具箱中直接将DataSet拖入当前窗体
()本例主要通过代码方式将数据库中的数据写入到DataSet然后再从DataSet中表的列名导出这需要引入两个命名空间SystemData和SystemDataSqlClient接着为当前窗体的Load事件添加如下代码
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog=StudentInf);
scOpen();
SqlCommand cmd = new SqlCommand();
cmdCommandText = select NameSexAge from Class;
cmdCommandType = CommandTypeText;
cmdConnection = sc;
SqlDataAdapter sd = new SqlDataAdapter();
sdSelectCommand = cmd;
sdFill(thisdataSet);
textBoxText = thisdataSetTables[]Columns[]ColumnName;
scClose();
本例仍然采用本章前面自建的数据库StudentInf先将它的前三列数据填充到dataSet中再从其中读出第一列的列名
下面进行代码解释
第一个需要解释的是连接对象SqlConnection它包含在SystemDataSqlClient命名空间中它提供了到数据源的连接及相关连接细节创建语法如下所示
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog= StudentInf);
scOpen();
Data Source是指访问的SQL Server的名称如果SQL Server运行在本机上直接用local即可Integrated Security是指登录到数据库时采用内置集成安全这样可以省去用户名和密码SSPI全称为Security Support Provider Interface它用于指定邓录数据库时的安全类型Initial Catalog表示需要登录的数据库名
建立完连接对象还需要对它进行打开这里选择SqlConnection的Open()方法
建立并打开连接对象以后下面要做的工作是可能是查询修改或删除数据库中的内容显然这里需要SQL命令这也就是SqlCommand对象所要完成的事情如下所示
SqlCommand cmd = new SqlCommand();
cmdCommandText = select NameSexAge from Class;
cmdCommandType = CommandTypeText;
cmdConnection = sc;
CommandText是指获取或设置对数据源执行的TransactSQL语句
select NameSexAge from Class
表示从表Class中选择NameSex和Age 三列数据CommandType用于解释CommandText的类型它有三个选择项包括StoredProcedure(存储过程的名称)TableDirect(表的名称)和Text(SQL文本命令)最后还需要将该命令对象关联到打开的数据连接
构建完SQL命令后SqlCommand还需要被执行它的执行方法有很多种如表所
表 SqlCommand的执行方法
方法名
说 明
ExecuteNonQuery()
返回受影响的行数
ExecuteReader()
返回SqlDataReader()对象
ExecuteXmlReader()
返回XmlReader对象
ExecuteScaler()
返回结果集中的首行首列
其中前三种方法支持异步操作
SqlDataAdapter在前两节已经介绍过只是当时采用的是图形化的方式它能用于填充DataSet对象在填充DataSet之前它必须先对数据库中需要操作的数据执行一些SQL命令主要包括以下几种方式
SelectCommand //执行选择操作
DeleteCommand //执行删除操作
UpdateCommand //执行更新操作
InsertCommand //执行插入操作
TableMappings //执行表映射
因为本例的命令对象是要执行选择操作所以采用SelectCommand如下所示
sdSelectCommand = cmd;
接下来是调用SqlDataAdapter的Fill()方法完成对dataSet的填充
在前面部分曾提到DataSet是以表格的形式存放数据所以DataSet里能包含表对象DataSet中能包含一个或多个表如果需要对这些表进行访问采用如下形式
dataSetTables[]Columns[]ColumnName
表示访问第一个表中第一列的列名
最后访问完数据库还应该关闭连接
scClose();
通过以上例子的学习读者应该对ADONET中的NET数据提供者有了更进一步的理解在上例中细心的读者可能会发现还遗漏了两个对象没有解释即SqlCommandBuilder对象和SqlDataReader对象
SqlCommandBuilder用于创建SQL命令它的用法和SqlCommand类似具体使用如下所示
SqlConnection sc = new SqlConnection(@Data Source=(local);Integrated Security=SSPI;+Initial Catalog= StudentInf);
scOpen();
SqlDataAdapter sd = new SqlDataAdapter(select NameSexAge from Classsc);
SqlCommandBuilder scb = new SqlCommandBuilder(sd);
sdFill(thisdataSet);
将实例化的SqlDataAdapter作为参数传递给SqlCommandBuilder构造函数时SqlCommandBuilder能自动生成SQL语句
SqlDataReader对象提供一种读取数据库中行的只进流的方式它不能被继承且必须实例化后才能使用以下是它的简单用法
SqlDataReader sdr = cmdExecuteReader(); //cmd为SqlCommand对象的实例
while (sdrRead())
{
……
}
sdrClose();
SqlDataReader最大的优势是能简单而且快速地读取数据