zoukankan      html  css  js  c++  java
  • ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别

    主要有这么几种,cmd.ExecuteReader();cmd.ExecuteNonQuery();cmd.ExecuteScalar();cmd.ExecuteXmlReader();)

     1,ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象,这个看你的程序的需要去  做。可以通过这个对象来检查查询结果,它提供了“游水”式的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。

    使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:一种是基于序号的查找,一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。例:

       int id=reader.GetOrdinal("CategoryName");
       while(reader.Read())
       {
            Response.Write(reader[id]);
       }
       reader.Close();

       至于第二种方式很直观,例:

     while(reader.Read())
       {
          Response.Write(reader.GetInt32(0).ToString()+" "+reader.GetString(1).ToString()+" <br>");
       }

     DataReader的GetInt32()和GetString()通过接收一个列号来返回一个列的值,这两种是最常用的,其中  还有很多其它的类型。

    (注:DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)

     2.,ExecuteNonQuery() 这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数。

     例:   

     int affectrows=cmd.ExecuteNonQuery();
       Response.Write(affectrows +" 条记录受影响");

      3,ExecuteScalar() 这个方法不接受任何参数,仅仅返回查询结果集中的第一行第一列,而忽略了其它的行和列,而且返回的是一个object类型,在使用之前必须先将它强制转换为所需类型。如果返回的仅仅是一个单独的数据元,则可以使用此方法来提高代码的性能。例:

       string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
       string strqry="select count(*) from Categories";
       SqlConnection con=new SqlConnection(strCon);
       con.Open();
       SqlCommand cmd=con.CreateCommand();
       int i=Convert.ToInt32(cmd.ExecuteScalar());
     //必须强制转换

     4,ExecuteXmlReader() 此方法用于XML操作,返回一个XmlReader对象,由于系统默认没有引用 System.Xml名空间,因此在使用前必须前引入。例:

       string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
       SqlConnection con=new SqlConnection(strCon);
       con.Open();
       SqlCommand cmd = new SqlCommand("select * from Categories FOR XML AUTO, XMLDATA", con);
       XmlReader xr=cmd.ExecuteXmlReader();
       Response.Write(xr.AttributeCount);  //这里获取当前节点上的属性个数
     
       
    xr.Close();

     执行完毕之后,照样要显式地调用Close()方法,否则会抛出异常。

  • 相关阅读:
    ionic localstorage
    angular 中文鏈接
    把jqmobi 變成jQuery 的插件 從此使用jQuery
    jqmobi 的一些設置
    ionic ngcordova map 地圖
    ionic pull to refresh 下拉更新頁面
    json 對象的序列化
    鍵盤彈出,頁面佈局被推上去了.....
    Cordova V3.0.0中config.xml配置文件的iOS Configuration
    android ios 只能輸入數字 不能輸入小數點的 函數 cordova
  • 原文地址:https://www.cnblogs.com/tdalcn/p/671722.html
Copyright © 2011-2022 走看看