我正在编写一种从数据库返回“资产”行的方法。它包含字符串、整数和字节数组(这可能是图像/电影/文档)。
现在对于大多数行访问,我使用以下方法,它返回一个 NameValueCollection,因为它是一个轻量级对象,易于使用并转换为 int 和字符串。
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 然后返回它的第一个数据行似乎有点浪费。
有没有更好的方法来做到这一点?
我在想可能是一个对象字典,然后我手动转换每个成员。
看看其他人如何解决这个问题会很有趣。我知道这有点属于微优化领域,只要我不为每个行查询返回数据集(希望我每次在一行代码中看到它都有一磅)它应该没问题。
也就是说,可能会调用此方法来分配一个盒子上的站点上的数据访问查询。
干杯
史蒂夫