1

SQLServerからデータを読み取るためにSqlDataReaderを使用しています。ただし、データを読み取り専用の軽量接続フリーオブジェクトとしてメモリにキャッシュしたい場合があります。BCLで自分に合ったオプションが見つかりませんでした。そのようなコンテナの独自の実装を作成する必要がありますか、それとも利用できますか?

データベースからのデータを軽量形式で保存するための代替手段はありますか?私にとって、 DataTableはまったく候補ではありません。

編集:

選択しているデータがわかったら、LINQを使用してリーダーをList<T>何かに簡単に変換できます。しかし、代わりに、構造がわからないデータをキャッシュできるようにしたいと思います。

4

5 に答える 5

3
List<object[]>

あなたが得ることができるのと同じくらい軽いようです。

さらに提供される機能 (列名、データバインディングのサポート、並べ替え、フィルタリングなど) が必要な場合は、その機能を派生/カプセル化して追加できます。

あなたの要件はかなりあいまいです。軽いってどういう意味?DataTable の不適切な点は何ですか? DataTable が提供するどの機能が必要ですか?

于 2009-11-28T09:07:33.357 に答える
1

最良の選択は、データ列を表す型を用意し、各行に対してそのクラスのインスタンスを作成し、そのプロパティにリーダーからの値を入力して、インスタンスをList<YourClass>構造体に格納することです。

何かのようなもの:

using(SqlDataReader rdr = sqlCommand.ExecuteReader())
{
    List<YourClass> resultList = new List<YourClass>();

    while(rdr.Read())
    {
         YourClass work = new YourClass();

         // set the properties        
         work.Property1 = rdr["Column1"].Value;
         .....
         work.PropertyN = rdr["ColumnN"].Value;

         resultList.Add(work);
    } 
} 

これは基本的に、ORM(オブジェクトリレーショナルマッパー)が行うことの核心です。可能な限り最速の方法(DataReader)を使用してデータベースからデータを読み取り、そこから.NETオブジェクトを構築します。

マーク

于 2009-11-28T07:41:05.840 に答える
1

独自のデータ構造を作成します。

BCL は、すべての人にとってすべてのものであってはなりません。それはビルディングブロックで構成されています。BCL には、独自のデータ構造を作成するために必要な構成要素が含まれています。

BCL にすべての問題に対する解決策が含まれている場合、それは肥大化した混乱になります。すべての機能が「すぐに」利用できるわけではありません。そうでなければ、プログラマーとして追加する価値はありません。

「通常の」使用パターンとは異なる、かなり明確な要件があるようです。DataSet と ORM の間では、大多数のプロジェクトは、要件が求めている機能がなくてもうまくいきます。

于 2009-11-28T10:04:06.983 に答える
1

List<Dictionary<String, Object>>Dictionary キーが列名で、値がセル値であるを使用できます。

行数が多い場合は、列名をList<String>と 値List<List<Object>>(またはArray) に分けることができます。

于 2009-11-28T10:10:49.193 に答える
0

これを使って:

List<string> Variable1 = new List<string>();
//Do something with the generic

string[] MyArray = Variable1.ToArray();

これは、メモリに保存するために必要な軽量で効率的な obj です。

于 2009-11-28T10:24:30.273 に答える