データベースから「asset」行を返すメソッドを書いています。文字列、int、バイト配列が含まれています(これは画像/映画/ドキュメントの場合があります)。
現在、ほとんどの行アクセスでは、次のメソッドを使用しています。これは、軽量オブジェクトであり、使いやすく、intと文字列をキャストできるためNameValueCollectionを返します。
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を作成してから、最初のデータ行を返すのは、ちょっと無駄に思えます。
これを行うためのより良い方法はありますか?
おそらくオブジェクトの辞書を考えており、それを手動で各メンバーにキャストします。
他の人がこれにどのように取り組んでいるかを見るのは興味深いでしょう。私はこれがマイクロ最適化の分野に該当することを知っています。各行クエリのデータセットを返さない限り(コード行でそれを見るたびにポンドがあればいいのですが)、問題ないはずです。
とはいえ、このメソッドは、1つのボックス上のサイトの割り当てに対するデータアクセスクエリの割り当てに対して呼び出される可能性があります。
乾杯
スティーブ