2014-01-11 120 views
28

我很困惑與何時使用ExecuteScalar,ExecuteReader,ExecuteNonQuery?

  1. 列表項
  2. 的ExecuteScalar的使用,
  3. 的ExecuteReader,
  4. 的ExecuteNonQuery

當使用這些方法?

+0

請正確重新提個問題爲您的標題提供其他一些信息,但你的問題的措辭有所不同。而不是在哪裏使用它應該是何時使用提供MSDN文檔的+1 – dbw

回答

36

ExecuteScalar()僅返回查詢第一行第一列的值。
ExecuteReader()返回一個對象,該對象可以迭代整個結果集,同時只在內存中保留一條記錄。
ExecuteNonQuery()根本不返回數據:只有受插入,更新或刪除影響的行數。

此外,可以看DbDataAdapter的類型,它包括一個填充()方法,允許你整個結果下載到一個的DataTable數據集對象,以及許多其他能力。

最後,這似乎是您熟悉MSDN的好時機。這是製作文檔的方式:您擁有方法名稱。去看看他們。

+1

當然也是正確的答案。 – TyCobb

2

本質上這是簡化的,但您可以查看每個SQL術語或.net對象或在MSDN上閱讀有關ADO.net的更多信息。

ExecuteScalar當您調用一個SQL標量函數時,它只返回一個數字。

ExecuteReader當您正在進行SQL調用時,將從表中返回一個記錄集,這將爲您提供一個SqlDataReader對象來檢索C#中的數據。

ExecuteNonQuery用於沒有任何類型的SQL服務器返回值時,例如一個簡單的UPDATE語句。

3

當您的查詢返回單個值時使用ExecuteScalar。如果它返回更多結果,那麼最終結果是第一行的第一列。一個例子可能是SELECT Count(*) from MyTable

使用ExecuteReader用於獲取SELECT col1, col2 from MyTable結果與多個行/列(如設置。

使用ExecuteNonQuery的,不會從數據庫中檢索結果,但要更新用在現有的數據庫SQL語句(例如, UPDATE, INSERT,等)。

7

What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

的ExecuteNonQuery

ExecuteNonQuery方法將返回 INSERT實現的行數,刪除或更新操作。這個ExecuteNonQuery方法將 僅用於插入,更新和刪除,創建以及設置語句。 (Read More about ExecuteNonQuery)

SqlCommand.ExecuteNonQuery MSDN Documentation

的ExecuteReader

,可執行讀取器將被用於返回組行,上 SQL查詢的執行或使用命令對象存儲過程。這是一個 只轉發記錄檢索,它用於從第一個到最後一個值讀取表 值。 (Read More about ExecuteReader)

SqlCommand.ExecuteReader MSDN Documentation

執行標量

執行標量將返回單列單獨列的值,即單 值,對SQL查詢的執行或存儲過程使用命令 對象。從數據庫中檢索單個值非常快。 (Read More about Execute Scalar

SqlCommand.ExecuteScalar MSDN Documentation

29

的ExecuteScalar:對於單值

Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT SUM(COLUMNNAME) FROM TABLE")); 
Int32 Value = Convert.ToInt32(ExecuteScalar("SELECT AVG(COLUMNNAME) FROM TABLE")); 

的ExecuteReader:行正向模式讀取

IdataReader dr = ExecuteReader("SELECT * FROM TABLE"); 
while(dr.Read()) 
{ 
    //You will get rows values like this dr["ColumnName"] 
} 

的ExecuteNonQuery:插入/刪除/更新的行成表

ExecuteNonQuery("DELETE FROM TABLE"); 
ExecuteNonQuery("UPDATE TABLE SET COLUMNNAME = 'A'"); 
相關問題