首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

21.3.1  执行命令

定义好命令后,就需要执行它们。执行语句有许多方式,这取决于要从命令中返回什么数据。<provider>Command类提供了下述可执行的命令:

       ExecuteNonQuery()—— 执行一个命令,但不返回任何结果。

       ExecuteReader ()—— 执行一个命令,返回一个类型化的IDataReader

       ExecuteScalar ()—— 执行一个命令,返回一个值。

除了上述命令外,SqlCommand类也提供了下面的方法:

       ExecuteXmlReader()—— 执行一个命令,返回一个 XmlReader对象,它可以用于传送从数据库中返回的XML代码段。

与其他章节一样,可以从Wrox网站www.wrox.com上下载本节的示例代码。

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对象。

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

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论