将文件推送到 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 功能(我认为这就是您所指的)的用武之地,因为它会提供所有双向流。
我找到了很多关于如何将文件保存到 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 功能(我认为这就是您所指的)的用武之地,因为它会提供所有双向流。