直接流式传输到数据库

时间:2008-10-31 03:25:19

标签: c# .net sql-server .net-2.0

我正在使用c#,并且有一个开放的tcpip连接接收数据。是否可以将流保存到ms sql server数据库,因为我收到它,而不是接收所有数据,然后保存所有数据?如果流可以在接收时发送到数据库,则不必将整个数据块保留在内存中。这有可能吗?

4 个答案:

答案 0 :(得分:4)

您是以BLOB的形式写入数据库,还是以某种形式翻译数据,然后为每一行执行插入?

你在评论中的回答让我感到困惑。将流写入BLOB列与获取数据然后将其转换为单独行的插入有很大的不同。

无论如何,通过首先创建需要插入的blob列的行,重复调用更新语句,可以流式传输到BLOB列:

update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId

来自流的字节块。

Perfect example located here.

答案 1 :(得分:2)

SQL Server 2005支持HTTP端点(不需要IIS),因此一种解决方案是在SQL Server上创建Web服务以直接接收流数据。

这些链接说明设置一个: http://codebetter.com/blogs/raymond.lewallen/archive/2005/06/23/65089.aspx http://msdn.microsoft.com/en-us/library/ms345123.aspx

答案 2 :(得分:1)

有关使用流和数据库的插图,请参阅herehere。实质上,您需要传递重复的缓冲区(理想情况下,SQL Server中的8040字节的倍数)。请注意,这些示例基于SQL 2000;使用SQL 2005,varbinary(max)会更容易。但非常相似。

答案 3 :(得分:1)

为什么不在接收数据包时将缓冲区写入文件,然后在传输完成后插入数据库?

如果您直接流式传输到数据库,您将长时间保持与数据库的连接,特别是如果客户端的网络连接不是最好的。