我正在使用c#,并且有一个开放的tcpip连接接收数据。是否可以将流保存到ms sql server数据库,因为我收到它,而不是接收所有数据,然后保存所有数据?如果流可以在接收时发送到数据库,则不必将整个数据块保留在内存中。这有可能吗?
答案 0 :(得分:4)
您是以BLOB的形式写入数据库,还是以某种形式翻译数据,然后为每一行执行插入?
你在评论中的回答让我感到困惑。将流写入BLOB列与获取数据然后将其转换为单独行的插入有很大的不同。
无论如何,通过首先创建需要插入的blob列的行,重复调用更新语句,可以流式传输到BLOB列:
update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId
来自流的字节块。
答案 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)
有关使用流和数据库的插图,请参阅here和here。实质上,您需要传递重复的缓冲区(理想情况下,SQL Server中的8040字节的倍数)。请注意,这些示例基于SQL 2000;使用SQL 2005,varbinary(max)会更容易。但非常相似。
答案 3 :(得分:1)
为什么不在接收数据包时将缓冲区写入文件,然后在传输完成后插入数据库?
如果您直接流式传输到数据库,您将长时间保持与数据库的连接,特别是如果客户端的网络连接不是最好的。