我发现了很多关于如何将文件保存到blob字段(VARBINARY)的引用,但它们似乎都要求sql server可以访问文件系统上的文件。我们的网络服务器驻留在另一台机器上,不幸的是,我不能将共享文件位置用于我的目的。
我想将文件从我的网络应用程序(C#代码)作为参数推送到存储的proc:@FileStream VARBINARY(MAX),然后以这种方式保存。这可能吗?
同样,我希望能够从sql server获取文件并稍后将其保存到Web服务器的文件系统中。
非常感谢任何帮助(代码示例)。
TIA。
答案 0 :(得分:1)
如果文件内容足够小以保留在内存中,带byte[]
的简单参数就可以正常工作:
comm.Parameters.Add(new SqlParameter("@FileStream",
SqlDbType.VarBinary, -1) { Value = someBytes });
阅读时,如果它足够小而不用担心流式传输,你可以这样做:
byte[] contents = (byte[])rdr[rdr.GetOrdinal("FileStream")];
答案 1 :(得分:1)
是的,你可以做你说的话,但不会是“流媒体”。例如,如果您打算从SQL发送文件 - >网络服务器 - >浏览器,它将不会开始发送到浏览器,直到整个文件从SQL传输 - >网络服务器。这就是SQL Server FILESTREAM功能(我认为是你所指的)的所在,因为它会全部是双向流。