.net 如何将DataTable转换为IDatareader?

5vf7fwbs  于 2023-04-22  发布在  .NET
关注(0)|答案(4)|浏览(171)

我们都知道DataReader比DataTable快,因为DataReader用于构造DataTable。
因此,既然我已经有了一个DataTable....为什么要将其转换为DataReader?
我正在创建一个名为IDataProvider的内部接口。这个接口既可以在本地实现,也可以作为WebService实现。这个接口将有一个方法“Getdata”,它接受一些条件信息并返回一些数据。
由于DataReader是最快的数据检索机制,我想使用它作为“GetData”方法的结果类型。然而,我们也知道DataReader是不可序列化的,因此不能通过Web服务在Web上传输...
在Web的情况下,我会让本地代理类以DataTable的形式请求数据,然后在本地将其转换为DataReader。
以这种方式,本地应用程序不需要知道(或关心)它是在本地还是远程访问数据。
但是,为了做到这一点,我需要知道...如何将DataReader Package 在预先存在的DataTable周围?
更新:我的业务逻辑不会保存在Webservice中,因为使用Webservice的DataProvider可以切换到不使用Webservice的DataProvider。因此,businessLogic将保存在客户端应用程序中。
我正在使用.Net 3.5 SP1

sbtkgmzw

sbtkgmzw1#

只需在DataTable上调用CreateDataReader()

0yg35tkg

0yg35tkg2#

DataReader是读取数据存储的最快方法,但仅在满足某些条件时才能使用:
1.数据将以只进方式读取。
1.数据为只读。
即使您的方案满足这些条件,DataReader也代表连接的数据存储区,这意味着您需要在DataReader通过网络传递的整个过程中保持连接打开,直到另一端的调用方法返回某种响应。
因此,我的观点是,一个活动的DataReader不应该在不同的层和应用程序之间传递,我宁愿先将数据提取到另一个数据存储或集合中,然后立即处理DataReader。

ycl3bljg

ycl3bljg3#

目前还没有现成的类可以为你做这件事,但是编写一个实现IDataReader的可序列化的类并不难,它是现有DataTable的 Package 器。
编辑:你可能会发现从DbDataReader继承更容易(我想,在对象资源管理器中检查SqlDataReader的基类)。它为你提供了一些接口实现。但是,是的,它仍然是相当多的枯燥代码。

wz1wpwve

wz1wpwve4#

你不能。DataReader和DataTable是两个不同的东西。
由于DataReader允许您以流的形式读取数据,我真的不明白您为什么要在客户端这样做。
DataReader通常用于从数据库读取数据,并添加逻辑以填充对象列表或DataTable。因此,最好在Web服务上执行与构建DataTable有关的大多数业务逻辑,将其作为Web服务传递给客户端,并与其他ADO.Net函数一起使用以获得更多业务逻辑。
也许你可以更具体地说明为什么你真的需要一个DataReader?

相关问题