私はデータベースから「資産」行を返すメソッドを作成しています。文字列、整数、バイト配列(これはイメージ/ムービー/ドキュメントのこともあります)を含みます。ASP.NETで最も効率的なデータをデータベースから取得する
ほとんどの行アクセスでは、LightValueCollectionを軽量オブジェクトとして使用し、intとstringを使いやすくキャストするため、次のメソッドを使用します。
public static NameValueCollection ReturnNameValueCollection(Database db, DbCommand dbCommand)
{
var nvc = new NameValueCollection();
using (IDataReader dr = db.ExecuteReader(dbCommand))
{
if (dr != null)
{
while (dr.Read())
{
for (int count = 0; count < dr.FieldCount; count++)
{
nvc[dr.GetName(count)] = dr.GetValue(count).ToString();
}
}
}
}
dbCommand.Dispose();
return nvc.Count != 0 ? nvc : null;
}
このようなデータアクセスのための私のアプローチは、通常、データローを返すメソッドを取得することです。
public static DataRow ReturnDataRow(Database db, DbCommand dbCommand)
{
var dt = new DataTable();
using (IDataReader dr = db.ExecuteReader(dbCommand))
if (dr != null) dt.Load(dr);
dbCommand.Dispose();
return dt.Rows.Count != 0 ? dt.Rows[0] : null;
}
DataTableを作成して最初のデータローを返すのは無駄です。
これを行うより良い方法はありますか?
私は多分、各メンバーを手動でキャストするオブジェクトの辞書を考えています。
他の人たちがこれにどのように取り組んできたのか興味深いでしょう。私はこのようなものがマイクロ最適化の分野に入ることを知っています。そして、各行のクエリに対してDataSetsを返さない限り(コード行でそれを確認するたびにポンドがあることを祈ってください)、それは問題ありません。
これは、この方法は、1つのボックス内のサイトに割り当てられたデータアクセスクエリに割り当てられていると言われています。
あなたはdemonstartingているもの乾杯
スティーブ
ちょっとした問題ですが、呼び出し元はデータの読み取り方法ではなく、DbCommand.Disposeメソッドを呼び出す必要があります。あなたの呼び出し元がdbCommandオブジェクトを提供して以来、それはそれを処理する必要があります。 –