我有以下场景:
我已经使用 FILESTREAM 成功地将我的文件(各种扩展名)保存到我的 sql server 数据库中。这些可以是任何东西,从图像到 word 文档、pdf 等。
现在我想检索它们并将它们作为文件保存到我的本地目录。
这是我目前所拥有的
我的函数调用 SQL 并获取我想要的文件流信息
public static void SelectFile(string sourceId)
{
string serverPath;
string filename;
byte[] serverTxn;
using (TransactionScope ts = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["DBConn"].ToString()))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("OPS.LoadFileBlobFromSQL", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@AttachmentId", SqlDbType.VarChar).Value = sourceId;
using (SqlDataReader rdr = cmd.ExecuteReader())
{
rdr.Read();
filename = rdr.GetSqlString(0).Value;
serverPath = rdr.GetSqlString(1).Value;
serverTxn = rdr.GetSqlBinary(2).Value;
rdr.Close();
}
}
StreamObjectFromFilestream(serverPath, serverTxn, filename);
}
ts.Complete();
}
}
private static void StreamObjectFromFilestream(string serverPath, byte[] serverTxn, string filename)
{
SqlFileStream sfs = new SqlFileStream(serverPath, serverTxn, FileAccess.Read);
byte[] buffer = new byte[sfs.Length];
sfs.Read(buffer, 0, buffer.Length);
System.IO.File.WriteAllBytes(@"c:\test\hello.pdf", buffer);
sfs.Close();
}
我正在获取服务器路径、文件名和 serverTxn ..但是当我进入我的 StreamObjectFromFilestream 函数时缓冲区是空的..我知道我在这里遗漏了一些简单的东西......只是不知道是什么。
任何指向正确方向的指示都将不胜感激。
谢谢, 科里
最佳答案
您可以跳过在 StreamObjectFromFilestram 中使用 SqlFilestream,您的 serverTxn 已经是方法 WriteAllBytes 需要的字节数组。
关于c# - sqlfilestream - 从 SQL Server 获取 blob 数据并将文件本地保存到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43127849/