13

DataReader は DataTable の構築に使用されるため、DataReader は DataTable よりも高速であることは誰もが知っています。

したがって、既に DataTable があるとすれば....なぜそれを DataReader に変換したいのでしょうか?

IDataProvider という内部インターフェイスを作成しています。このインターフェースは、ローカルと WebService の両方で実装されることを意図しています。インターフェイスには、いくつかの基準情報を受け取り、いくつかのデータを返すメソッド「Getdata」があります。

DataReader は最も高速なデータ取得メカニズムであるため、これを "GetData" メソッドの結果の型として使用したいと考えています。ただし、DataReader はシリアル化できないため、Web サービスを介して Web 経由で転送できないこともわかっています...

Web の場合、ローカル プロキシ クラスでデータを DataTable として要求し、それをローカルで DataReader に変換します。

このように、ローカル アプリケーションは、ローカルまたはリモートでデータにアクセスしているかどうかを知る (または気にする) 必要はありません。

ただし、これを行うには知っておく必要があります...既存の DataTable を DataReader でラップするにはどうすればよいですか?

更新: Web サービスを使用する DataProvider は、そうでないものと切り替え可能であるため、私のビジネス ロジックは Web サービスに保持されません。したがって、businessLogic はクライアント アプリで保持されます。

FWIW私は.Net 3.5 SP1を使用しています

4

4 に答える 4

33

DataTableでCreateDataReaderを呼び出すだけです

于 2009-01-27T16:23:36.873 に答える
1

DataReaderはデータストアを読み取るための最速の方法ですが、特定の条件が満たされた場合に限ります。

  1. データは順方向のみの方法で読み取られます。
  2. データは読み取り専用です。

シナリオでこれらの条件が満たされている場合でも、DataReaderは接続されたデータストアを表します。つまり、DataReaderがネットワークを通過する間、およびもう一方の端で呼び出されたメソッドが一部を返すまで、接続を開いたままにする必要があります。一種の応答。

したがって、アクティブなDataReaderをさまざまなレイヤーやアプリケーションに渡してはならないというのが私の意見です。私はむしろ、最初にデータを別のデータストアまたはコレクションに抽出し、DataReaderをすぐに破棄したいと思います。

于 2009-01-26T12:40:10.617 に答える
0

これを行う既存のクラスはありません。ただし、IDataReaderを実装し、既存のDataTableのラッパーであるシリアル化可能なクラスを作成するのは難しいことではありません。

編集:DbDataReaderから継承する方が簡単な場合があります(オブジェクトエクスプローラーでSqlDataReaderの基本クラスを確認してください)。それはあなたにインターフェースの含意のいくつかを提供します。しかし、はい、それはまだかなり多くの鈍いコードです。

于 2009-01-26T12:35:06.633 に答える
-2

できません。DataReader と DataTable は 2 つの異なるものです。

DataReader を使用するとデータをストリームとして読み取ることができるため、これをクライアント側で実行する理由がよくわかりません。

通常、DataReader は、データベースからデータを読み取り、ロジックを追加してオブジェクトのリストまたは DataTable を埋めるために使用されます。そのため、Web サービスでの DataTable の構築に関係するほとんどのビジネス ロジックを実行し、それを Web サービスとしてクライアントに渡し、そこで他の ADO.Net 関数と連携してより多くのビジネス ロジックを処理するのが最善です。

DataReader が本当に必要な理由をより具体的に説明できるでしょうか?

于 2009-01-26T11:59:36.330 に答える