我正在编写一个方法来从数据库中返回“资产”行。它包含字符串,整数和一个字节数组(这可能是一个图像/电影/文档)。从ASP.NET中的数据库获取一行数据的最有效方法
现在,对于大多数行访问,我使用下面的方法返回一个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然后返回它的第一个datarow似乎有点浪费。
有没有更好的方法来做到这一点?
我想也许是一个对象的字典,然后我手动投的每个成员。
看到别人如何解决这个问题会很有趣。我知道这种情况属于微型优化领域,只要我没有为每一行查询返回DataSet(希望每次在代码行中看到它都有一磅),它应该没问题。
也就是说这种方法很可能被要求在一个盒子上的所有站点上分配数据访问查询。
干杯
史蒂夫
只是一个小问题,但调用者应该调用DbCommand.Dispose方法,而不是您的数据读取方法。由于您的调用者提供了dbCommand对象,因此应该引用它。 – 2009-04-16 19:55:31