【问题标题】: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 功能(我认为您所指的)的用武之地,因为它将所有双向流式传输。