Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sqlfilestream—从SQL Server获取blob数据并将文件本地保存到磁盘_C#_Sql Server_Sqlfilestream_Flatfiledestination - Fatal编程技术网

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

C# sqlfilestream—从SQL Server获取blob数据并将文件本地保存到磁盘,c#,sql-server,sqlfilestream,flatfiledestination,C#,Sql Server,Sqlfilestream,Flatfiledestination,我有以下情况: 我已使用FILESTREAM成功地将文件(各种扩展名)保存到sql server数据库中。这些可以是从图像到word文档、pdf等任何内容 现在我想检索它们并将它们作为文件保存到本地目录 这是我到目前为止所拥有的 我的函数调用SQL并获取所需的文件流信息 public static void SelectFile(string sourceId) { string serverPath; string filename;

我有以下情况:

我已使用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();
    }
我正在获取服务器路径、文件名和服务器TXN。。但是当我进入StreamObjectFromFilestream函数时,缓冲区是空的。。我知道我错过了一些简单的事情。。。只是不知道是什么

任何指向正确方向的指示都将不胜感激

谢谢,
Corey

您可以跳过在StreamObjectFromFilestram中使用SqlFilestream,您的serverTxn已经是WriteAllBytes方法所需的字节数组