web-dev-qa-db-ja.com

ExecuteScalar、ExecuteReader、ExecuteNonQueryの違いは何ですか?

これら3つを使用する場合、どのような場合がありますか?どこで使用すべきか、使用すべきではないのか?

97
nectar
  • ExecuteScalarは通常、クエリが単一の値を返すときに使用されます。それ以上を返す場合、結果は最初の行の最初の列です。例としては、SELECT @@IDENTITY AS 'Identity'があります。
  • ExecuteReaderは、複数の行/列を持つ結果セットに使用されます(例:SELECT col1, col2 from sometable)。
  • ExecuteNonQueryは通常、結果のないSQLステートメント(UPDATE、INSERTなど)に使用されます。
178
Mark Wilkins

ExecuteNonQuery():

  1. アクションクエリ(Create、Alter、Drop、Insert、Update、Delete)のみで機能します。
  2. クエリの影響を受ける行の数を返します。
  3. 戻り型はintです
  4. 戻り値はオプションであり、整数変数に割り当てることができます。

ExecuteReader():

  1. アクションおよび非アクションクエリで動作します(選択)
  2. クエリによって選択された行のコレクションを返します。
  3. 戻りタイプはDataReaderです。
  4. 戻り値は必須であり、別のオブジェクトDataReaderに割り当てる必要があります。

ExecuteScalar():

  1. 集約関数を含む非アクションクエリで動作します。
  2. クエリ結果の最初の行と最初の列の値を返します。
  3. 戻りタイプはオブジェクトです。
  4. 戻り値は必須であり、必要な型の変数に割り当てる必要があります。

参照URL:

http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html

38
umarali1981

それぞれが異なるタイプの実行です。

  • ExecuteScalarは、単一の値を返すクエリのタイプになります。

    例は、挿入後に生成されたIDを返すことです。

    INSERT INTO my_profile (Address) VALUES ('123 Fake St.'); SELECT CAST(scope_identity() AS int)

  • ExecuteReaderは、結果のすべての列を一度に1行ずつ読み取ることができるデータリーダーを返します。

    例としては、1人以上のユーザーのプロファイル情報をプルする場合があります。

    SELECT * FROM my_profile WHERE id = '123456'

  • ExecuteNonQueryは、値を返さないSQLですが、実際には、削除の挿入や何かの変更など、何らかの形式の作業を実行しています。

    例は、データベース内のユーザーのプロファイルを更新します。

    UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'

37
Brendan Enrick

ドキュメントから(注:MSDNは、物事が何であるかを知りたいときに便利なリソースです!):

ExecuteScalar

ExecuteScalarメソッドを使用して、データベースから単一の値(集計値など)を取得します。これには、ExecuteReaderメソッドを使用してから、SqlDataReaderによって返されたデータを使用して単一の値を生成するために必要な操作を実行するよりも少ないコードが必要です。

ExecuteReader

CommandTextをConnectionに送信し、SqlDataReaderを構築します。

...および SqlDataReader ...

SQL Serverデータベースから行の順方向専用ストリームを読み取る方法を提供します。このクラスは継承できません。

ExecuteNonQuery

ExecuteNonQueryを使用して、カタログ操作(データベースの構造のクエリやテーブルなどのデータベースオブジェクトの作成など)を実行したり、UPDATE、INSERT、またはDELETEステートメントを実行してDataSetを使用せずにデータベース内のデータを変更したりできます。

9
Greg Beech

他の人が投稿したものに追加するには:

ExecuteScalarは、概念的には、クエリの結果セットの最初の行から左端の列を返します。 SELECT * FROMスタッフをExecuteScalarできますが、結果の行の最初のセルのみを取得します。通常、単一の値を返すクエリに使用されます。私はSQLServerについて100%確信していませんが、Oracleでは、wouldnt FUNCTION(単一の値を返すデータベースコード)を実行し、関数の戻り値を与えると期待しています関数は単一の値を返しますが。ただし、クエリの一部として関数を実行している場合、たとえばSELECT SUBSTR( 'abc'、1、1)FROM DUALその後、戻り値が結果の行セットの左上のセルに格納されるという事実により、戻り値を返します

ExecuteNonQueryは、データを変更する(INSERT/UPDATE/DELETE)またはデータベース構造を変更する(CREATE TABLE ...)データベースストアドプロシージャ、関数、クエリを実行するために使用されます。通常、呼び出しの戻り値は、操作によって影響を受けた行の数を示しますが、これを保証するにはDBのドキュメントを確認してください

8
Matt

ExecuteReader()は、クエリの結果に対して前方アクセスと読み取り専用アクセスを提供するデータプロバイダーDBDataReaderオブジェクトを返すSQLクエリを実行します。

ExecuteScalar()は、レコードカウントの取得などのシングルトンクエリ用に設計されたExecuteReader()メソッドに似ています。

ExecuteNonQuery() create、delete、update、insertで動作する非クエリを実行します)

4
Rogers

ExecuteNonQueryメソッドは、INSERT、DELETE、またはUPDATE操作で影響を受けた行の数を返します。このExecuteNonQueryメソッドは、挿入、更新、削除、作成、およびSETステートメントでのみ使用されます。 (続きを読む)

ExecuteScalarは、コマンドオブジェクトを使用したSQLクエリまたはストアドプロシージャの実行時に、単一行単一列値、つまり単一値を返します。データベースから単一の値を取得するのは非常に高速です。 (続きを読む)

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

3
Zia Ur Rahman

ExecuteNonQuery

このExecuteNonQueryメソッドは、挿入、更新、削除、作成、およびSETステートメントでのみ使用されます。 ExecuteNonQueryメソッドは、INSERT、DELETE、またはUPDATE操作で影響を受けた行の数を返します。

ExecuteScalar

データベースから単一の値を取得するのは非常に高速です。 Execute Scalarは、コマンドオブジェクトを使用したSQLクエリまたはストアドプロシージャの実行時に、単一行単一列値、つまり単一値を返します。 ExecuteReader

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

3

ExecuteNonQuery:は通常、挿入、更新、削除操作などのSqlステートメントから何も返されない場合に使用されます。

cmd.ExcecuteNonQuery();

ExecuteScalar:

Sqlクエリが単一の値を返す場合に使用されます。

Int b = cmd.ExcecuteScalar();

ExecuteReader

SQLクエリまたはストアドプロシージャが複数の行/列を返す場合に使用されます

SqlDataReader dr = cmd.ExecuteReader();

詳細については、ここをクリックしてくださいhttp://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery

1
DotNetLover