【发布时间】:2009-01-26 11:51:57
【问题描述】:
我们都知道 DataReader 比 DataTables 更快,因为 DataReader 用于构建 DataTable。
因此,鉴于我已经有一个 DataTable.... 我为什么要将它转换为 DataReader?
我正在创建一个名为 IDataProvider 的内部接口。此接口旨在在本地和作为 WebService 实现。该接口将有一个“Getdata”方法,该方法获取一些标准信息并返回一些数据。
由于 DataReader 是最快的数据检索机制,我希望将其用作“GetData”方法的结果类型。 但是我们也知道 DataReader 不可序列化,因此无法通过 Web 服务在 Web 上传输...
对于网络,我会让本地代理类将数据请求为 DataTable,然后在本地将其转换为 DataReader。
通过这种方式,本地应用程序不需要知道(或关心)它是在本地还是远程访问数据。
但是,为了做到这一点,我需要知道... 如何将 DataReader 包装在预先存在的 DataTable 周围?
更新:我的业务逻辑不会保存在 Web 服务中,因为使用 Web 服务的 DataProvider 可以切换为不使用的。 因此,businessLogic 将保存在客户端应用程序中。
FWIW 我正在使用 .Net 3.5 SP1
【问题讨论】:
-
2 否决票有人愿意评论为什么吗?
-
可能是因为您只声明要使用 DataReader,因为您认为它会帮助您提高性能。有关应用程序设置、为什么要使用 DataReader 而不是 DataTable 以及业务逻辑所在位置的更多信息可能会有所帮助。
-
业务逻辑驻留在客户端应用程序中。
-
不确定要告诉您关于 Datareader 的原因...我的选择是 1.> 数据表/数据集 2.> 自定义结构。 3.> 数据阅读器。由于 1 和 2 在所有情况下都需要使用 3,因此 1 和 2 必须更慢。因此我选择了 3 作为事实上的传输机制。这是错的吗?
-
如果您真的担心,请将实现细节隐藏在外观后面,这样您就可以优化您的代码,而无需修改您的使用者。然而,这可能有点困难。您可能想研究 linq-ifying 您的通讯:IQueryable 而不是 IDataReader。
标签: .net ado.net datatable idatareader