2011-12-27 9 views
7

私は、クライアント、従業員、サービス、販売、および予定の記録を保持する小さなキャッシャーアプリケーションのようなものを作成しています。私は、Windowsフォームを使用して、そのDataGrids内です。アプリケーション用に使用するデータベースを作成しました。代わりにSqlCommand-SqlDataReaderまたはSqlDataAdapter-DataSetを使用する必要があるかどうかを知りたい。どのアプローチが良いですか?SqlCommandまたはSqlDataAdapter?

+0

[SqlDataReaderのVSのSqlDataAdapter(http://stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader)SqlDataReaderのVSのSqlDataAdapter]の –

+0

可能な重複(http://stackoverflow.com/の可能重複質問/ 1676753/sqldataadapter-vs-sqldatareader) –

答えて

13

これは、必要な操作の種類によって大きく異なります。

以下は私のsuggetionです。あなたがより速くデータを読み取るSqlDataReaderのために行きたいが、それは、操作のコストとして付属している場合

  1. は、あなたはまた、後にリード時 を取る必要があります。 接続を開く データを読み取る 接続を閉じます。それ以上に閉じるのを忘れてしまった場合、パフォーマンスが低下します。 SqlDataAdapterオブジェクト

    • ため

    • ゴーあなたはより速く読み、切断されたアーチの利点を使用したい場合。

    • これにより自動的に接続が閉じられます。
    • また、DataSetの更新をDataBaseに自動的に処理させることもできます。 (SqlCommandBuilder)
  2. SQLCommand(これは、読み込みデータ用にSQLDataReaderを読み込んだ場合)と挿入と更新のために使用します。

    • これにより、挿入と更新のパフォーマンスが向上します。

は、.NETフレームに3.5 SP1を使用しているか、後で私はLINQ to SQLのをお勧めしますかEntity Frameworkのも あなたの目的を解決したい場合。

ありがとうございました。必要に応じて、あなたのクライアントやアップデートデータベースに

2

これらのコンポーネント(Core ADO.NET)(Command、Connection、DataAdapter)を認識している場合は、Entity Data ModelまたはLinq-SQLをお勧めします。

SqlDataAdapterは、暗黙的にSqlCommand,SqlConnectionおよびSqlDataReaderを使用するヘルパークラスです。

4

SqlDataAdapter

  • データが格納されます。したがって、それは より多くのメモリを消費します。
  • 一方、insert/delete/update/selectコマンドでデータベースに接続する必要はありません。
  • 内部で接続を管理しているため、 を心配する必要はありません。

SqlDataAdapterからのすべての良いものは、より多くのメモリを消費します。これは通常、データベースに接続された複数のユーザーを必要とするシステムに使用されます。
あなたの状況がSqlCommandと接続されたモデルではないと言えます。

2

データを読み込み、更新/挿入/削除しない場合は、SqlDataReaderが高速になります。また、DataSetと組み合わせることもできます。 usingステートメントでデータアクセスオブジェクトをラップすると、ランタイムは接続クリーンアップロジックを処理します。

私は、多くの場合、同期アクセスに使用するパターンは、このようなものです:アップデートについて

DataTable result = new DataTable(); 
using (SqlConnection conn = new SqlConnection(MyConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(MyQueryText, conn)) 
    { 
     // set CommandType, parameters and SqlDependency here if needed 
     conn.Open(); 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      result.Load(reader); 
     } 
    } 
} 

/削除/挿入を、SqlDataAdapterは検討する価値があるかもしれませんが、あなたはすでにDataSetでデータを持っている通常場合にのみ、 。さもなければ、より速く、より良い方法があります。

+0

データアダプタは、数百万のレコード(私のデータセットにある2〜3百万のレコード)を挿入するのに適していますか? –

1

DataReader - datareaderは、データベースの転送専用の読み取り専用ストリームのデータ です。これにより、データリーダは、 の時間に1つのレコードだけがメモリに取り込まれるため、データ検索のための非常に効率的な手段が実現されます( )。デメリット:接続オブジェクトには一度に1つの データレアしか含めることができません。したがって、 が終了した時点で明示的にデータレアを終了する必要があります。これにより、他の用途への接続が解放されます。 データアダプタオブジェクトは、開口部を管理し、

DataAdapterを実行する コマンドの接続を閉じるであろう - SQLコマンドとデータセットを充填し、データ ソースを更新するために使用されるデータベース 接続のセットを表します。 データの取得と保存のためのデータセットとデータソースの間のブリッジとして機能します。 DataAdapterは、 マッピングでこのブリッジを提供します。データセット内のデータをデータソース内のデータ と一致するように変更し、Updateはデータセット内のデータと一致するようにデータ のデータを変更します。これを使用すると、DataAdapter も必要に応じて自動的に接続を開いたり閉じたりします。

関連する問題