【问题标题】:Push file to sql server stored proc to save in Blob, then retrieve said file将文件推送到 sql server 存储过程以保存在 Blob 中,然后检索所述文件
【发布时间】:2015-06-07 20:39:30
【问题描述】:

我找到了很多关于如何将文件保存到 blob 字段 (VARBINARY) 的参考资料,但它们似乎都要求 sql server 可以访问文件系统上的文件。我们的网络服务器位于另一台机器上,遗憾的是没有可用于我的目的的共享文件位置。

我想将文件从我的网络应用程序(C# 代码)作为参数推送到存储过程:@FileStream VARBINARY(MAX),然后以这种方式保存。这可能吗?

同样,我希望能够从 sql server 中获取文件并稍后将其保存到 web server 的文件系统中。

任何帮助(代码示例)将不胜感激。

TIA。

【问题讨论】:

    标签: c# sql-server blob varbinary


    【解决方案1】:

    如果文件内容足够小以保存在内存中,带有byte[] 的简单参数就可以正常工作:

    comm.Parameters.Add(new SqlParameter("@FileStream", 
        SqlDbType.VarBinary, -1) { Value = someBytes });
    

    再次阅读时,如果它足够小而不必担心流式传输,您可以这样做:

    byte[] contents = (byte[])rdr[rdr.GetOrdinal("FileStream")];
    

    【讨论】:

    • 谢谢乔,这看起来和我要找的完全一样。我试试看。
    • 我稍微调整了一下,但这是完美的。非常感谢。
    • 这不是流式传输,所以如果您处理大文件会遇到问题。
    【解决方案2】:

    是的,可以按您说的做,但不会是“流式传输”。例如,如果您打算从 SQL -> Web 服务器 -> 浏览器发送文件,它不会开始将其发送到浏览器,直到整个文件从 SQL -> Web 服务器传输。这就是 SQL Server FILESTREAM 功能(我认为您所指的)的用武之地,因为它将所有双向流式传输。

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2020-02-11
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多