来源:http://book.csdn.net/bookfiles/16/100165600.shtml
定义好命令后,就需要执行它 们。执行语句有许多方式,这取决于要从命令中返回什么数据。<provider>Command类提供了下述可执行的命令:
● ExecuteNonQuery()—— 执行一个命令,但不返回任何结果。
● ExecuteReader ()—— 执行一个命令,返回一个类型化的IDataReader。
● ExecuteScalar ()—— 执行一个命令,返回一个值。
除了上述命令外,SqlCommand类也提供了下面的方法:
● ExecuteXmlReader()—— 执行一个命令,返回一个 XmlReader对象,它可以用于传送从数据库中返回的XML代码段。
1. ExecuteNonQuery()方法
这个方法一般用于UPDATE、 INSERT或 DELETE语句,惟一的返回值是受影响 的记录个数。但如果调用一个有输出参数的存储过程,该方法就有返回值:
using System;
using System.Data.SqlClient;
public class ExecuteNonQueryExample
{
public static void Main(string[]args)
{
string source ="server=(local)\\NetSDK; integrated security=SSPI; database=Northwind";
string select = "UPDATE Customers SET ContactName = 'Bob' WHERE ContactName = 'Bill'";
SqlConnection conn = newSqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select,conn);
int rowsReturned = cmd.ExecuteNonQuery();
Console.WriteLine("{0} rowsreturned.", rowsReturned);
conn.Close();
}
}
ExecuteNonQuery()返回命令所操作的行数,它为一整数。
2. ExecuteReader()方法
这个方法执行命令,根据使用的提供 程序返回一个类型化的DataReader对象,返回的对象可以用于迭代返回的记录,如下面的代码所 示。图21-2显示了这段代码的结果。
using System;
using System.Data.SqlClient;
public class ExecuteReaderExample
{
public static void Main(string[]args)
{
string source ="server=(local)\\NetSDK; integrated security=SSPI; database=Northwind";
string select = "SELECT ContactName,CompanyName FROM Customers";
SqlConnection conn = newSqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select,conn);
SqlDataReaderreader = cmd.ExecuteReader();
while(reader.Read())
{
Console.WriteLine("Contact : {0,-20} Company :{1}", reader[0] , reader[1]);
}
}
}
图 21-2
3. ExecuteScalar()方法
在许多情况下,需要从SQL语句返回一个结果,例如给定表中的记录个数,或者服务器的当前日期/时间。ExecuteScalar方法就可以用于这 些场合:
using System;
using System.Data.SqlClient;
public class ExecuteScalarExample
{
public static void Main(string[]args)
{
string source="server=(local)\\NetSDK; integrated security=SSPI; database=Northwind";
string select = "SELECT COUNT(*)FROM Customers";
SqlConnection conn = newSqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select,conn);
object o = cmd.ExecuteScalar();
Console.WriteLine ( o ) ;
}
}
该方法返回一个对象,如果需要,可以把该对 象的数据类型转换为合适的类型。
4. ExecuteXmlReader()方法(只用于SqlClient提供程序)
顾名思义,这个方法执行命令,给调用者返回一个XmlReader对象。SQL Server允许使用FOR XML子句来扩展SQL子句,这个子句可以带有下述3个选项中的一个:
● FOR XML AUTO:根据FROM子句中的表建立一个树
● FOR XML RAW:结果集中的行映射为 元素,其中的列映射为属性
● FOR XML EXPLICIT:必须指定 要返回的XML树 的形状
Professional SQLServer 2000 XML(ISBN 1-861005-46-6)一书列出了这些选项的完整描述。下面的示例使用了AUTO:
using System;
using System.Data.SqlClient;
using System.Xml;
public class ExecuteXmlReaderExample
{
public static void Main(string[]args)
{
string source="server=(local)\\NetSDK; integrated security=SSPI; database=Northwind";
stringselect = "SELECT ContactName,CompanyName FROM Customers FOR XML AUTO";
SqlConnectionconn = new SqlConnection(source);
conn.Open();
SqlCommandcmd = new SqlCommand(select, conn);
XmlReaderxr = cmd.ExecuteXmlReader();
xr.Read();
string s;
do
{
s= xr. ReadOuterXml();
if (s!="")
Console.WriteLine(s);
} while(s!="");
conn.Close();
}
}
注意必须导入System.Xml命名空间,才能输出返回的XML。这个命 名空间和.NET Framework其他的XML功能将在第24章中详细论述。
本例在SQL语句中包含了FOR XML AUTO子句,然后调用ExecuteXmlReader()方法。代码的结果图如图21-3所示。
在SQL子句中,我们指定了FROM Customers,这样类型Customers的元素就显示在输出中。为它添加元素,每个元素对应于从数据库中选择出来的列。这就为每个从数据库中选择出来的行建立了XML标志。
图 21-3