定义好命令后,就需要执行它们。执行语句有许多方式,这取决于要从命令中返回什么数据。<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 = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select, conn);
int rowsReturned = cmd.ExecuteNonQuery();
Console.WriteLine("{0} rows returned.", 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 = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select, conn);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Console.WriteLine("Contact : {0,-20} Company : {1}" ,
reader[0] , reader[1]);
}
}
}

图 21-2
本章的后面将讨论<provider>DataReader对象。