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 = new SqlConnection(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 SQL Server 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";
string select = "SELECT ContactName,CompanyName " +
"FROM Customers FOR XML AUTO";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlCommand cmd = new SqlCommand(select, conn);
XmlReader xr = 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