• [.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

  • 相关阅读:
    解决方案下显示的网站名称被追加编号的问题解决方法
    sql server 2008 报表服务器(sql server 2008 report service)中如何固定行或者列
    如何通过参数来切换图表和数据
    饼图中如何将一定比例的小切片收集在一起
    饼图图例中显示百分比值
    如何根据条件隐藏列
    饼图上如何显示百分比值
    负载均衡
    在UTF8页中接收和使用以GB2312方式进行URL编码的中文数据
    ASP 格式化显示时间为几个月,几天前,几小时前,几分钟前,或几秒前
  • 原文地址:https://www.cnblogs.com/hcbin/p/1715505.html
Copyright © 2020-2023  润新知