将文件推送到sql server存储过程以保存在Blob中,然后检索所述文件

时间:2015-04-02 19:08:49

标签: c# sql-server blob varbinary

我发现了很多关于如何将文件保存到blob字段(VARBINARY)的引用,但它们似乎都要求sql server可以访问文件系统上的文件。我们的网络服务器驻留在另一台机器上,不幸的是,我不能将共享文件位置用于我的目的。

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

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

非常感谢任何帮助(代码示例)。

TIA。

2 个答案:

答案 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功能(我认为是你所指的)的所在,因为它会全部是双向流。