0

データベース関連のすべての操作がデータベース層で実行される 3 層アプリケーションがあります。

いくつかのクエリでは、巨大なデータが sqldatareader (32 列で約 1000 万行) にフェッチされます。私の質問は、この大きなデータをプレゼンテーション レイヤーに渡し、レポートを生成する方法です。

分析した後、以下のオプションがあります。同じことについてあなたの意見を共有してください。

  1. sqlDatareader 自体を渡す

    • 接続を常に開いたままにしておく必要があるため、これは実際にはアイデアではありません。
  2. データテーブルを使用

    • sqldatareader をデータテーブルにロードし、return ステートメントとして渡します。これは良さそうですが、これが適切なアプローチであるかどうかはわかりません。この場合、アプリケーションの全体的なパフォーマンスに影響するかどうかを知りたいです。?
  3. リストをカスタム オブジェクトとして使用します。

そのwinformベースのアプリケーションは単一のマシンにのみインストールされ、.net Framework 3.5を使用しています

ご意見やご感想をお待ちしております。

4

3 に答える 3

1

一度にこれほど多くのデータを渡す必要は本当にあるのでしょうか? ページングの方が良いのではないでしょうか? それはあなたの多くの問題を解決します。とにかく、1 ページに 1000 万のデータを見たいと思う人がいるでしょうか? ページにすべてのデータが読み込まれるまで 5 分間待ちたいと思う人がいるでしょうか?

3 層アーキテクチャを使用している場合は、データベースとの直接通信にオブジェクトではなく、いくつかのビジネス オブジェクトを使用することをお勧めします。プレゼンテーション層は、使用されるデータベースについて何も知らないか、ほとんど知らない必要があります。したがって、db レイヤーで、ロードされたデータを取得し、それをビジネス オブジェクトに格納して、これらのオブジェクトをプレゼンテーション レイヤーに渡します。

于 2013-10-31T10:55:15.837 に答える
0

** sqldatareader を渡すと、多くのネットワーク使用量が発生するため、長時間接続を維持することはお勧めできません。

** datatable を使用することは望ましいオプションですが、この膨大なデータに対して実行する操作の種類によって異なります。デフォルトでは、データテーブルは最大 16,777,216 行を保持できます

これら2つのうち、2番目の方がより好ましく、優れたパフォーマンスが得られます

于 2013-10-31T10:55:59.933 に答える
0

SQLDataReader または DataTable を別のアプリケーション レイヤーに渡さないでください。これにより、DAL および DataBase モデルの実装が公開され、アプリケーション レイヤーの分離が損なわれます。そうは言っても、SQLDataReader はデータベースへの接続を開いたままにします。したがって、必要なすべての行を読み取り、できるだけ早く閉じる必要があります。設計上、独自のクラスを使用してデータを表す必要があります。とにかく、プレゼンテーション層にそれだけ多くの行が必要ですか? 私に特有の音。

于 2013-10-31T11:00:13.877 に答える