如何在C#中更改SqlDataReader的缓冲区大小?

问题描述:

我正在使用SqlDataReader进行数据迁移。如何增加一次插入目标的记录数?如何在C#中更改SqlDataReader的缓冲区大小?

+1

但是... sqldatareader不会*做*插入...所以:你用什么*插入?如果它是类似sqlbulkcopy的,那*表示*有多种调整批量大小的方法(即:缓冲区大小) - 最重要的是'.BatchSize' –

+0

说实话我不明白,你想要什么: - | – CHS

+0

我认为OP意味着他希望增加用于将记录“插入”到目的地(数据库=源,客户端=目的地)的缓冲区,以便读取记录。我不知道,但我认为这取决于您不能以编程方式和数据库驱动程序([通常8kilobytes](https://stackoverflow.com/a/1383961/284240))更改的网络缓冲区。 –

我想增加一次插入到目标的记录数。

然后,这与SqlDataReader无关,您需要查看您用于插入的任何工具。如果您使用SqlBulkCopy,那么这应该与更改.BatchSize一样简单。如果您使用其他机制,则必须具体。例如,如果您使用SP来执行一次只能处理一行的插入操作,则一个选项可能是使用MARS并重叠async操作;我有一种实用方法,我用这种顺序固定深度重叠(即非常不同于Parallel.ForEach会做的,例如,即使是固定的最大DOP)。如果您使用通过基于TDS的表参数工作的插入,那么:在调用操作之前,在本地缓存大量数据。如果您使用的是ORM,例如EF:请参阅ORM的插入文档。

但是:要强调的是:不是得到这个数据的投票是:数据读取器。

+0

实际要求是将数据从sql server迁移到postgres.Code使用sqldatareader从源读取数据并使用npgsql将数据插入到destination.its中,默认情况下,sqldatareader一次可以容纳8kb数据(不确定).i想要知道sqldatareader可以同时处理多少数据,并且可以增加......全部在一台服务器上完成,而不是在网络中完成。 – saju