C#與數據庫訪問技術總結(五)之Command對象的常用方法

Command對象的常用方法

   說明:上篇總結了Command對象的幾個數據成員,這節總結Command對象的常用方法。

  同樣,在不同的數據提供者的內部,Command對象的名稱是不同的,在SQL Server Data Provider裏叫SqlCommand,而在OLE DB Data Provider裏叫OleDbCommand。

    下面將詳細介紹Command類型對象的常用方法,包括構造函數、執行不帶返回結果集的SQL語句方法、執行帶返回結果集的SQL語句方法和使用查詢結果填充DataReader對象的方法。

    1.構造函數

構造函數用來構造Command對象。對於SqlCommand類型的對象,其構造函數說明如表 2-6所示。

 

函數定義 

  參數說明

函數說明

SqlCommand()

不帶參數

創建SqlCommand對象

SqlCommand(string cmdText)

 cmdText: SQL 語句字符串

根據SQL語句字符串,創建SqlCommand對象 

SqlCommand(string cmdText, SqlConnection connection)

cmdText: SQL 語句字符串

connection: 連接到的數據源

根據數據源和SQL語句,創建SqlCommand對象

SqlCommand(string cmdText, SqlConnection connection,  SqlTransaction transaction)

cmdText: SQL語句字符串

connection: 連接到的數據源

transaction: 事務對象

根據數據源和SQL語句和事務對象,創建SqlCommand對象

 

(1) 第一個構造函數不帶任何參數

複製代碼

  SqlCommand  cmd=newe SqlCommand();

  cmd.Connection=ConnectionObject;
  
  string CommandText=" select *from studentInfo ";

  cmd.CommandText=CommandText;

複製代碼

 

上面代碼段使用默認的構造函數創建一個SqlCommand對象。然後,把已有的Connection對象ConnectionObject和命名文本CommandText分別賦給了Command對象的Connection屬性和CommandText屬性。      

除此之外,許多關係型數據庫,例如SQL Server 和Oracle,都支持存儲過程。可以把存儲過程的名稱指定爲命名文本。例如,使用編寫 GetAllStudent存儲過程爲命名文本:

string CommandText=" GetAllStudent ";

cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText=CommandText;

 

(2) 第二個構造函數可以接受一個命令(SQL)文本

 string CommandText=" select *from studentInfo "; 

  SqlCommand  cmd=newe SqlCommand(CommandText);

  cmd.Connection=ConnectionObject;

 

上面的代碼實例化了一個Command對象,並使用給定命令文本對Command對象的CommandText屬性進行了初始化。

然後,使用已有的Connection 對象對Command對象的Connection屬性進行了賦值。(這種方法在上一篇說過,不建議使用,使用最多的是下面的方法)

(3) 第三個構造函數接受一個Connection和一個命名文本

  SqlCommand  cmd=newe SqlCommand(CommandText, ConnectionObject);

 

注意這兩個參數的順序,第一個爲string類型的命令文本,第二個爲Connection對象。

(4) 第四個構造函數接受三個參數,第三個參數是SqlTransaction對象,這裏不做討論。

另外,Connection 對象提供了CreateCommand方法,該方法將實例化一個Command對象,並將其Connection屬性賦值爲建立該Command對象的Connection對象。

無論在什麼情況下,當把Connection對象賦值給Command對象的Connection屬性時,並不需要Connection對象是打開的。但是,如果連接沒有打開,則在命令執行之前必須首先打開連接。

 

而對於OleDbCommand類型的對象,其構造函數如下表所示。同樣可以看出,它們和SqlCommand類的構造函數非常相似。

 

函數定義

參數說明

函數說明

OleDbCommand()

不帶參數

創建OleDbCommand對象

OleDbCommand(string cmdText)

cmdText: SQL語句字符串

根據SQL語句字符串,創建OleDbCommand對象

OleDbCommand(string cmdText,OleDbConnection connection)

cmdText: SQL語句字符串

connection:連接到的數據源

根據數據源和SQL語句,創建OleDbCommand對象

OleDbCommand(stringcmdText, OleDbConnection connection ,

OleDbTransaction transaction)

cmdText: SQL語句字符串

connection:連接到的數據源

transaction:事務對象

根據數據源和SQL語句和事務對象,創建OleDbCommand對象

 

 

 

 

 

 

 

 

 

 

 

命令對象構造完成後,就可以執行命令對數據庫進行操作了。命令對象所提供的用於執行命令的方法有很多種,具體使用哪個方法取決於命令的執行結果返回什麼樣的數據。

SqlCommand 提供了4個執行方法:ExecuteNonQuery()、ExecuteScalar()、ExecuteReader()、ExecuteXmlReader()。

詳細見下面相關部分。

命令對象提供的用於執行命令的方法及其含義如表

 

方法

含義

Cancel

試圖取消命令的執行

ExecuteNonQuery

對連接執行SQL語句並返回受影響的行數

ExecuteReader

執行查詢,將查詢結果返回到數據讀取器(DataReader)中

ExecuteScalar

執行查詢,並返回查詢所返回的結果集中第一行的第一列。忽略額外的列或行

ExecuteXmlReader

執行查詢,將查詢結果返回到一個XmlReader對象中

 

 

  

 

 

 

 

 

 

 

2.ExecuteNonQUery方法

ExecuteNonQuery方法用來執行Insert、Update、Delete等非查詢語句和其他沒有返回結果集的SQL語句,並返回執行命令後影響的行數。

如果Update和Delete命令所對應的目標記錄不存在,返回0。如果出錯,返回-1。

複製代碼

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="update student set  name='Jone' where name='Bill' ";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

cmd.ExecuteNonQuery();

cn.Close();

複製代碼

 

3.ExecuteScalar()方法

    在許多情況下,需要從SQL語句返回一個結果,例如客戶表中記錄的個數,當前數據庫服務器的時間等。

    ExecuteScalar方法執行一個SQL命令,並返回結果集中的首行首列(執行返回單個值的命令)。如果結果集大於一行一列,則忽略其他部分。

  根據該特性,這個方法通常用來執行包含Count、Sum等聚合函數的SQL語句。

複製代碼

下面的代碼讀取數據庫中表student的記錄個數,並把它輸出到控制檯上。

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="select count(*) from student";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

object count=cmd.ExecuteScalar();

Console.WriteLine(count.ToString());

cn.Close();

ExecuteScalar()方法的返回值類型是Object,根據具體需要,可以將它轉換爲合適的類型。

複製代碼

 

    4.ExecuteReader()方法

    ExecuteReader()方法執行命令,並使用結果集填充DataReader對象。

    ExecuteReader()方法用於執行查詢操作,它返回一個DataReader對象,通過該對象可以讀取查詢所得的數據。

    ExecuteReader()方法在Command對象中用得比較多,通過DataReader類型的對象,應用程序能夠獲得執行SQL查詢語句後的結果集。

  該方法的兩種定義爲:

       ExecuteReader(),不帶參數,直接返回一個DataReader結果集。

       ExecuteReader(CommandBehavior behavior),根據behavior的取值類型,決定DataReader的類型。

      如果behavior取值是CommandBehavior.SingleRow這個枚舉值,則說明返回的ExecuteReader只獲得結果集中的第一條數據。

    如果取值是CommandBehavior.SingleResult,則說明只返回在查詢結果中多個結果集裏的第一個。

  一般來說,應用代碼可以隨機訪問返回的ExecuteReader列,

  但如果behavior取值爲 CommandBehavior.SequentialAccess,則說明對於返回的ExecuteReader對象只能順序讀取它包含的列。

  也就是說,一旦讀過該對象中的列,就再也不能返回去閱讀了。這種操作是以方便性爲代碼換取讀數據時的高效率,需謹慎使用。

複製代碼

String cnstr="server=(local);database=student; Integrated Security=true";

SqlConnection cn=new SqlConnection(cnstr);

cn.Open();

string sqlstr="select * from student";

SqlCommand cmd=new SqlCommand(sqlstr, cn);

SqlDataReader dr=cmd.ExecuteReader();//建立SqlDataReader 對象

while(dr.Read())//循環輸出每一條記錄

{

    String name=dr["姓名"].ToString();//讀取姓名子段

    Console.WriteLine(name);//控制檯輸出

}

dr.Close();//關閉結果集

cn.Close();//關閉數據庫連接


這段代碼從數據庫的student表中讀取全部數據,並把該表的“姓名”字段的數據全部輸出到控制檯上。

複製代碼

 

 

ExecuteXmlReader 

SqlCommand特有的方法,OleDbCommand無此方法。該方法執行將返回XML字符串的命令。它將返回一個包含所返回的XML的System.Xml.XmlReader對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章