将文件推送到 sql 服务器存储过程以保存在 Blob 中,然后检索该文件

Push file to sql server stored proc to save in Blob, then retrieve said file

我找到了很多关于如何将文件保存到 blob 字段 (VARBINARY) 的参考资料,但它们似乎都要求 sql 服务器能够访问文件系统上的文件。我们的网络服务器驻留在不同的机器上,不幸的是没有共享文件位置可供我使用。

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

同样,我希望能够从 sql 服务器获取文件并稍后将其保存到 Web 服务器的文件系统。

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

TIA。

如果文件内容小到可以保存在内存中,一个带有 byte[] 的简单参数就可以了:

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

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

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

是的,可以按照您说的去做,但不会 "streaming." 例如,如果您打算从 SQL -> 网络服务器 -> 浏览器发送文件,在整个文件从 SQL -> Web 服务器传输之前,它不会开始将其发送到浏览器。这就是 SQL 服务器 FILESTREAM 功能(我认为这就是您所指的)的用武之地,因为它会提供所有双向流。