c# - 通过 OleDbConnection 获取单个记录的最佳方法是什么?

标签 c# .net oledb

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];

cmd 是传递给方法的 OleDbCommand 对象。根据 VS 2008 分析器,当我执行此操作时,创建对象所需时间的大约 95% 是在 da.Fill(ds) 调用中。

我还有一个类表示这些实现 IEnumerable 的对象的集合,当使用 foreach 迭代该对象时,每个单独的记录对象都是动态创建的,那些 da.Fill(ds) 语句会快速累加。

我的问题是,这是获取单个记录的最佳方式吗?或者,是否有更优选的方法来实现集合对象,以便迭代它不会花费这么长时间?

谢谢

最佳答案

使用 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
    }
}

SingleRow 向底层 OLEDB 提供程序提供提示,使其能够优化其处理结果的方式。

关于c# - 通过 OleDbConnection 获取单个记录的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339010/

相关文章:

c# - GraphQL HotChocolate 添加 PaginationAmountType 将我的 int 转换为 PaginationAmmount

.net - HEAT5151 给定的程序集名称或代码库无效

ms-access - Access 数据库的只读连接字符串

c# - 如何使用 oleDbDataAdapter.Update(myDataSet) 更新 excel 文件

c# - MonoTouch 中的 ViewForZoomingInScrollView

c# - 使用C#获取Azure服务器中的所有数据库

c# - 可以在 .net 中扩展 String 类

c# - 从可视化 foxpro 数据源动态获取架构的速度问题

c# - 为什么要从 Unity 委托(delegate)事件中删除事件?

c# - 从 .Net 调用 Visual FoxPro COM 对象(进程外)时出现 RPC_E_SERVERFAULT?