[.NET] - ExecuteNonQuery(),ExecuteReader(),ExecuteScalar(),ExecuteXmlReader()介绍

来源: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

posted @ 2010-04-19 16:48  炎峰森林影  阅读(489)  评论(0编辑  收藏  举报