表14-3 SqlCommand的执行方法 方 法 名说 明
ExecuteNonQuery()返回受影响的行数
ExecuteReader()返回SqlDataReader()对象
ExecuteXmlReader()返回XmlReader对象
ExecuteScaler()返回结果集中的首行首列
其中,前三种方法支持异步操作。
SqlDataAdapter在前两节已经介绍过,只是当时采用的是图形化的方式。它能用于填充DataSet对象。在填充DataSet之前,它必须先对数据库中需要操作的数据执行一些SQL命令。主要包括以下几种方式。 SelectCommand //执行选择操作
DeleteCommand //执行删除操作 UpdateCommand //执行更新操作 InsertCommand //执行插入操作 TableMappings //执行表映射 |
因为本例的命令对象是要执行选择操作,所以采用SelectCommand,如下所示。
sd.SelectCommand = cmd;
接下来是调用SqlDataAdapter的Fill()方法完成对dataSet1的填充。
在前面部分曾提到,DataSet是以表格的形式存放数据,所以DataSet里能包含表对象。DataSet中能包含一个或多个表,如果需要对这些表进行访问,采用如下形式。
dataSet1.Tables[0].Columns[0].ColumnName
表示访问第一个表中第一列的列名。
最后,访问完数据库还应该关闭连接。
| sc.Close(); |
通过以上例子的学习,读者应该对ADO.NET中的.NET数据提供者有了更进一步的理解。在上例中细心的读者可能会发现还遗漏了两个对象没有解释,即SqlCommandBuilder对象和SqlDataReader对象。
SqlCommandBuilder用于创建SQL命令,它的用法和SqlCommand类似,具体使用如下所示。
| SqlConnection sc = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;"+"Initial Catalog= StudentInf"); sc.Open(); SqlDataAdapter sd = new SqlDataAdapter("select Name,Sex,Age from Class1",sc); SqlCommandBuilder scb = new SqlCommandBuilder(sd); sd.Fill(this.dataSet1); |
将实例化的SqlDataAdapter作为参数传递给SqlCommandBuilder构造函数时,SqlCommandBuilder能自动生成SQL语句。
SqlDataReader对象提供一种读取数据库中行的只进流的方式,它不能被继承且必须实例化后才能使用,以下是它的简单用法。
| SqlDataReader sdr = cmd.ExecuteReader(); //cmd为SqlCommand对象的实例 while (sdr.Read()) { …… } sdr.Close(); |
SqlDataReader最大的优势是能简单而且快速地读取数据。
