C#,.Net 2.0:我有一个类,它从通过OleDbConnection对象访问的数据库中包装一条记录.它很简单,它执行"SELECT*FROM table WHERE key = {some value};" 然后使用几种方法将字段公开为属性来操作数据.当我创建此对象的新实例时,执行的代码如下所示:
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Connection.Open();
}
da.Fill(ds);
return ds.Tables[0];
Run Code Online (Sandbox Code Playgroud)
cmd是传递给方法的OleDbCommand对象.根据VS 2008分析器,当我执行此操作时,创建对象所需的时间大约是在da.Fill(ds)调用中的95%.
我还有一个类,它表示实现IEnumerable的这些对象的集合,当使用foreach迭代该对象时,每个单独的记录对象都是动态创建的,而那些da.Fill(ds)语句很快就会加起来.
我的问题是,这是获取单个记录的最佳方式吗?或者,是否有更优选的方法来实现集合对象,因此迭代它不需要这么长时间?
谢谢
Bra*_*non 10
使用OleDbDataReader和考虑使用CommandBehavior.SingleRow.
using (OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
// Bind your object using the reader.
}
else
{
// No row matched the query
}
}
Run Code Online (Sandbox Code Playgroud)
SingleRow 提供了对底层OLEDB提供程序的提示,允许它优化处理结果的方式.
| 归档时间: |
|
| 查看次数: |
12437 次 |
| 最近记录: |