c# - sqlfilestream - 从 SQL Server 获取 blob 数据并将文件本地保存到磁盘

标签 c# sql-server sqlfilestream flatfiledestination

我有以下场景:

我已经使用 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/

相关文章:

sql - 找到一个字段的值与另一字段中数据的最大值匹配

sql-server-2008-r2 - 是否可以创建一个虚拟文件流文件组来仅研究 mdf 内容?

c# - sqlFileStream 系统.ComponentModel.Win32Exception : The request is not supported

c# - 如何在 mvc 中提交操作时获取所有 ListBox 项目(不仅是选定的项目)

c# - String 在 C# RadioButton 中未被识别为有效的 bool 值

c# - JavaScript 等同于 C# 的 DynamicObject?

sql-server - 了解 Adventureworks2012 数据库结构

未处理的 C# 异常

SQL 大小写选择

sql-server - SQL Server : deleting FIELSTREAM files and num_unprocessed_items