2011-10-01 17 views
7

単純なSQL文を使用してデータベースと直接通信できる場合、データセットの目的を理解したいと思います。 また、どちらの方が良いですか?データセット内のデータを更新し、一度にデータベースに転送するか、データベースを直接更新しますか?データセットの目的は何ですか?

答えて

28

を使用Datasetとで例を使用すべき場合には詳細に説明して単純なSQLステートメント。

なぜあなたは冷蔵庫に食べ物を持っていますか?食べ物を食べたいときはいつも食料雑貨店に直接行くことができますか?あなたがスナックを食べるたびに食料品店に行くのでは非常に不便です。

DataSetsの目的はで、単純なSQL文を使用してデータベースと直接通信しないようにすることです。データセットの目的は、気になるデータの安価なローカルコピーとして機能することで、高価な高レイテンシのデータベース呼び出しを続ける必要がなくなります。彼らはデータストアに一度を運転し、来週のために必要なものすべてを拾い、それが必要なときにその台所の冷蔵庫に入れておく。

また、どのように優れていますか?データセット内のデータを更新し、一度にデータベースに転送するか、データベースを直接更新しますか?

ウェブサイトから十数種類の製品を注文します。どちらの方法が良いですか?メーカーから入手できるようになるとすぐにアイテムを1つずつ配達するか、またはそれらがすべて利用可能になるまで待ってからまとめて出荷します。最初の方法は、できるだけ早く各項目を取得することです。 2番目の方法は配送コストが低くなります。どの方法がより良いですか?どのように私たちは知っているべきですか?それは決めるのはあなた次第です!

データ更新戦略がの方が良いは、お客様のニーズとニーズをより良く満たす方法です。あなたは、「より良い」というあなたの顧客の評価基準が何であるか教えてくれていないので、質問に答えられません。あなたの顧客は何を求めていますか?できるだけ早く最新のもの、または手数料が安いですか?

+0

ありがとう:D – Lihini

+0

ところで、お客様はいません。ちょうど私自身。それは私が練習のためにやっている株式管理システムです。データは繰り返し表示され、更新されるため、データセットがその答えになると思います。しかし、システム障害が発生した場合でも、ユーザーによって行われたすべての更新に対してデータベースが更新されない限り、ユーザーが実行したすべての作業が失われるという問題があります。データセットでこれを防ぐことは可能ですか? – Lihini

+0

@Lizzie:それは新しい質問の素晴らしい候補です。 –

0

通常、大規模なデータセットに対して一連の分析プロセスを実行する必要がある場合は、データセット(または構造に応じてデータテーブル)を入力します。そうすれば、それはデータベースから切断されたモデルです。

しかし、DMLクエリでは、データベースに直接アクセスすることをお勧めします(ストアドプロシージャを使用することをお勧めします)。私はこれが最も効率的であることを発見しました。そして、うまくチューニングされたクエリでは、DB上で全く悪くありません。

11

データセットは、切断されたアーキテクチャをサポートしています。ローカルデータを追加してそこから削除し、SqlAdapterを使用すると、データベースにすべてをコミットできます。 xmlファイルを直接データセットにロードすることもできます。それは本当にあなたの必要条件に依存します。 DataSetのテーブル間のメモリ関係を設定することもできます。

あなたのアプリケーションに埋め込まれたダイレクトSQLクエリを使用するbtwは、アプリケーションを設計する際に本当に悪い貧弱な方法です。あなたのアプリケーションは "Sql Injection"を受けやすいでしょう。第二に、アプリケーションに埋め込まれたクエリを書くと、Sql Serverは実行計画を毎回実行する必要がありますが、ストアドプロシージャはコンパイルされ、コンパイル時には実行が既に決定されています。また、SQL Serverは、データが大きくなると計画を変更することができます。これによりパフォーマンスが向上します。少なくともストアドプロシージャを使用し、その中のジャンク入力を検証します。これらは本質的にSQLインジェクションに耐性があります。

ストアドプロシージャとデータセットは、移動する方法です。

は、この図を参照してください:

enter image description here

編集:あなたは、.NET Framework 3.5、4.0にしている場合は、Entity Frameworkの、NHibernateは、亜音速のようなオームズの数を使用することができます。 ORMはビジネスモデルをより現実的に表します。 ORMにサポートされていない機能がある場合は、ORMでストアドプロシージャを使用できます。

例:再帰的なCTE(Common Table Expression)を作成する場合は、ストアドプロシージャが非常に役に立ちます。 Entity Frameworkを使用すると、問題が多すぎます。

+0

私は、関係するデータを適切なオブジェクトに変換するためのオブジェクト・リレーショナル・マッパー(ストアド・プロシージャもうまくサポートしているEntity Frameworkなど)を使用すると..... ..... –

+0

@ marc_s:私も同意するでしょう。しかし、この質問は.Netフレームワーク2.0を扱っています。私は「Stored Procedures and Dataset」と言いました。私は、古い古いSqlHelperクラスと一緒にAdo.Netに行く方法だと言っていました。 – TCM

+0

@GertArnold:ありがとうございます。私は訂正しました。説明のために – TCM

3

This pageは、私たちが直接使用してデータベースと通信することができたときにデータセットの目的を理解したいあなたは、データベースに直接アクセス

関連する問題