2014-01-11 63 views
28

私はExecuteScalar、ExecuteReader、ExecuteNonQueryを使用するタイミングは?

  1. リスト項目
  2. は、ExecuteScalarの使用と混乱しています、
  3. のExecuteReader、
  4. は、ExecuteNonQuery

これらのメソッドを使用するには?

+0

テーブルに行を更新するためには、正しく質問をリフレームしてください。 'Where when use'の代わりに、' When when use'を使用する必要があります。 – dbw

答えて

36

ExecuteScalar()は、クエリの最初の行の最初の列の値のみを返します。
ExecuteReader()は、一度に1つのレコードのみをメモリに保持しながら、結果セット全体を反復処理できるオブジェクトを返します。
ExecuteNonQuery()はデータをまったく返しません。挿入、更新、または削除の影響を受ける行の数だけです。

また、あなたがのDataTableまたはのDataSetオブジェクトに全体の結果セットをダウンロードすることができます塗りつぶし()法だけでなく、多数のを含んたDbDataAdapterタイプ、で見ることができます他の能力。

最後に、これはMSDNに慣れるのに良い時期のようです。これはドキュメント化のためのもので、メソッド名があります。彼らを見上げてください。

+1

+1はMSDNドキュメントに言及しています...そしてもちろん正しい答えです。 – TyCobb

2

これは基本的に簡略化されていますが、SQL用語または.netオブジェクトをそれぞれ検索するか、詳細についてはMSDNのADO.netを参照してください。

ExecuteScalar単一の数値を返すSQLスカラー関数を呼び出すと、

ExecuteReaderテーブルからレコードセットを返すSQL呼び出しを行うと、C#でデータを取得するためのSqlDataReaderオブジェクトが得られます。

は、SQLサーバーから期待される種類の戻り値がない場合に使用されます。例は単純なUPDATEステートメントです。

3

クエリが単一の値を返す場合はExecuteScalarを使用してください。結果がさらに返された場合、最終結果は最初の行の最初の列になります。例では、複数の行/列(例えば、SELECT col1, col2 from MyTableで結果セットを取得するためSELECT Count(*) from MyTable

使用ExecuteReaderかもしれません。

使用ExecuteNonQueryデータベースから結果を取得しますが、既存のデータベース(例えばにupdationをすることはありませんSQL文のために、 UPDATE, INSERT,など)。

7

What is the difference between ExecuteReader, ExecuteNonQuery and ExecuteScalar

は、ExecuteNonQuery

ExecuteNonQueryメソッドは、 INSERTで行われた行の数を返すまたはDELETE UPDATE操作します。このExecuteNonQueryメソッドは、 が挿入、更新および削除、作成、およびSET ステートメントに対してのみ使用されます。 (Read More about ExecuteNonQuery)

SqlCommand.ExecuteNonQuery MSDN Documentation

のExecuteReader

Readerが SQLクエリまたはコマンドオブジェクトを使用してストアドプロシージャの実行には、行のセットを返すために使用されます実行します。この1つは レコードの前方のみの検索で、最初から最後までのテーブル の値を読み取るために使用されます。 (Read More about ExecuteReader)

SqlCommand.ExecuteReader MSDN Documentation

スカラー

がスカラーSQLクエリまたはコマンド オブジェクトを使用して、ストアドプロシージャの実行時に、すなわち単一 値の単一の行単一の列値を返す実行し実行します。データベースから単一の値を取得するのは非常に高速です。 (Read More about Execute Scalar

SqlCommand.ExecuteScalar MSDN Documentation

29

は、ExecuteScalar:1つの値

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'"); 
関連する問題