【发布时间】:2008-10-31 03:25:19
【问题描述】:
我正在使用 c#,并且有一个开放的 tcpip 连接来接收数据。是否可以在我接收流时将流保存到 ms sql server 数据库,而不是接收所有数据然后全部保存?如果可以在接收流时将流发送到数据库,则您不必将整个数据块保存在内存中。这有可能吗?
【问题讨论】:
标签: c# .net sql-server .net-2.0
我正在使用 c#,并且有一个开放的 tcpip 连接来接收数据。是否可以在我接收流时将流保存到 ms sql server 数据库,而不是接收所有数据然后全部保存?如果可以在接收流时将流发送到数据库,则您不必将整个数据块保存在内存中。这有可能吗?
【问题讨论】:
标签: c# .net sql-server .net-2.0
您是作为 BLOB 写入数据库,还是以某种形式转换数据,然后对每一行执行插入操作?
你在 cmets 中的回答让我很困惑。将流写入 BLOB 列与获取数据然后将其转换为单独行的插入是完全不同的。
无论如何,通过首先创建包含您需要插入的 blob 列的行,重复调用更新语句,可以流式传输到 BLOB 列:
update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId
用于流中的字节块。
【讨论】:
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
【讨论】:
为什么不在接收数据包时将缓冲区写入文件,然后在传输完成时插入数据库?
如果您直接流式传输到数据库,您将长时间保持与数据库的连接打开,尤其是在客户端的网络连接不是最好的情况下。
【讨论】: