【问题标题】:Streaming directly to a database直接流式传输到数据库
【发布时间】:2008-10-31 03:25:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您是作为 BLOB 写入数据库,还是以某种形式转换数据,然后对每一行执行插入操作?

    你在 cmets 中的回答让我很困惑。将流写入 BLOB 列与获取数据然后将其转换为单独行的插入是完全不同的。

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

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

    用于流中的字节块。

    Perfect example located here.

    【讨论】:

    • 在大多数情况下,我会完全按照收到的数据将数据写入数据库。在某些情况下,我会读取原始数据,构建一个 xml 流并保存它。我敢肯定,如果你刚刚回答了第一个场景,我可以为第二个场景自己推导出一些东西。谢谢。
    • 很好的例子,帮助解决了我遇到的类似情况
    【解决方案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

    【讨论】:

      【解决方案3】:

      有关使用流和数据库的示例,请参阅 herehere。本质上,您需要传递重复的缓冲区(在 SQL Server 中最好是 8040 字节的倍数)。请注意,这些示例基于 SQL 2000;使用 SQL 2005,varbinary(max) 会更容易。不过非常相似。

      【讨论】:

        【解决方案4】:

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

        如果您直接流式传输到数据库,您将长时间保持与数据库的连接打开,尤其是在客户端的网络连接不是最好的情况下。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 1970-01-01
          • 2015-09-15
          • 2016-02-16
          • 2016-05-03
          • 2019-11-06
          • 2020-01-15
          相关资源
          最近更新 更多