2014-01-10 36 views
2

我正在使用BCP从SQL Server中导出数据。输出文件被写入磁盘,但需要重新编码。使用C#,我将文件重新编码为UTF8并将其重新保存到磁盘。因为它必须保存输出,重新编码,然后重新保存。似乎效率低下。如何缓冲BCP输出而不是写入文件

我想知道是否有办法消除两次保存数据。例如,在将输出写入磁盘之前,将输出指向内存或在内存中截取BCP输出文件?

任何意见非常感谢。

+0

您目前如何调用BCP?作为C#应用程序的一部分或单独? – Yuck

+0

为什么你甚至使用BCP,为什么不使用[SqlDataReader](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader%28v=vs.110%29.aspx )直接在您的代码中读取记录? –

+0

@Yuck - 我不是从C#应用程序调用它,而是直接从SQL Server调用它 - 使用EXEC MASTER..xp_cmdshell'bcp“SELECT blah,blah,QUERYOUT - 想创建批处理文件以帮助进一步加速,但这是另一个问题 – user2732180

回答

0

将数据加载到C#应用程序中,并使用您喜欢的任何格式将其写入磁盘。与定制应用程序相比,BCP没有固有的效率优势。在基于C++的BCP中,您可能会在ADO.NET + C#中使用更多的CPU。这是要测试的。

+0

你可以分享你如何使用BCP指定编码吗?我认为这是OP的关键点Stion的。 – Yuck

+0

@Yuck我不知道。如果文档没有说明如何去做,那很可能是不可能的。 – usr

+0

那么在那种情况下,OP想要将BCP输出指向内存,以便他不必向文件系统写入两次。如果我错误地陈述了任何事情,OP可以加入。 – Yuck

0

您应该查看Windows命名管道。类似于Unix的概念,但不容易创建。

This blog post提供了一个工具,它可以设置管道并自动压缩写入它的“文件”数据。我们使用它来压缩bcp输出,而不将未压缩的文件写入磁盘。

提供的代码让您“应该”能够修改它来转换编码,而不是压缩数据。

相关问题