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


回答:


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

39
ExecuteNonQuery影響を受ける行数を返すことができます。
Sangram Nandkhile 2013年

テーブルのコレクションを返すストアドプロシージャを呼び出す必要がある場合、ExecuteNonQueryが使用されると思いました。
Gogutz 2014年

ExecuteNonQueryは、ストアドプロシージャにreturnステートメントがある場合にも機能します。stackoverflow.com/questions/6210027/...
FrenkyB

40

ExecuteNonQuery():

  1. アクションクエリでのみ機能します(作成、変更、削除、挿入、更新、削除)。
  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

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

  • 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'


1
ExecuteReaderを使用して、ExecuteScalarとExecuteNonQueryの両方によって実行されるジョブを実行できるようですが、なぜ他の2つを使用するのでしょうか。パフォーマンス上のメリットはありますか?
user20358 2013年

ExecuteReaderの使いすぎを回避する1つの理由は、それが完了するまでそのリーダーを保持するためです。これらのすべてについて、それらを最も効果的に使用するために、それらがどのように機能するかについての特定の情報を知りたいと考えています。ここで概説したのは、いくつかの良いガイドラインです。
ブレンダンエンリック2013年

9

ドキュメントから(メモ:何が行われているのかを知りたい場合、MSDNは便利なリソースです!):

ExecuteScalar

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

ExecuteReader

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

...そしてSqlDataReaderから...

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

ExecuteNonQuery

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


8

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

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

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


4

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

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

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


3

ExecuteNonQuery

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

ExecuteScalar

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

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


3

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

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

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


1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.