繁体   English   中英

如何使用SqlFileStream对SQL Server 2012 FileTable进行事务性访问?

[英]How to use SqlFileStream for transactional access to SQL Server 2012 FileTable?

我正在尝试在WCF服务中使用SqlFileStream对象来获取SQL Server 2012 FileTable中特定文件的句柄。 我能够像你期望的那样使用这段代码获得路径和事务上下文:

            using (SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["FileStorage"].ConnectionString))
            {
                con2.Open();                                         
                string getFileHandleQuery = String.Format(
                    @"SELECT FileTableRootPath(), file_stream.GetFileNamespacePath(), GET_FILESTREAM_TRANSACTION_CONTEXT()
                      FROM {0}
                      WHERE stream_id = @streamId", "FSStore");

                byte[] serverTransactionContext;
                string serverPath;
                using (SqlCommand sqlCommand = new SqlCommand(getFileHandleQuery, con2))
                {
                    sqlCommand.Parameters.Add("@streamId", SqlDbType.UniqueIdentifier).Value = new Guid(finalFileHandleStreamId);

                    using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                    {
                        sqlDataReader.Read();
                        serverPath = String.Concat(sqlDataReader.GetSqlString(0).Value, sqlDataReader.GetSqlString(1).Value);
                        serverTransactionContext = sqlDataReader.GetSqlBinary(2).Value;
                        sqlDataReader.Close();
                    }
                }
                con2.Close();
            } 

但是,一旦我尝试并实际使用路径和事务上下文来创建新的SqlFileStream:

using (SqlFileStream dest =
              new SqlFileStream(serverPath, serverTxn, FileAccess.Write))
{
    ...
}

上述情况有所不同:安装的文件系统不支持扩展属性。

有人可以向我解释我在这里做错了什么吗?

谢谢!

如果您尝试使用FileTable并在新建SqlFileStream对象时收到错误,请检查filePath值。

SqlFileStream sfs = new SqlFileStream(filePath, objContext, System.IO.FileAccess.Read); <-- Error "The mounted file system does not support extended attributes" 

正确获取filePath值的方法是

SELECT [file_stream].PathName() FROM dbo.fTable WHERE name = 'test.xlsx'

filePath值应如下所示:

\\HOSTNAME\MSSQLSERVER\v02-A60EC2F8-2B24-11DF-9CC3-AF2E56D89593\test\dbo\fTable\file_stream\A654465D-1D9F-E311-B680-00155D98CA00\VolumeHint-HarddiskVolume1

不喜欢:

\\HOSTNAME\MSSQLSERVER\Store\fDirectory\test.xlsx

这是设计所必需的。 请参阅https://connect.microsoft.com/SQLServer/feedback/details/729273/sql-server-denali-filetable-access-using-sqlfilestream-returns-error-the-mounted-file-system-does-not -支持扩展的属性

和使用OpenSqlFilestream访问FILESTREAM数据http://technet.microsoft.com/en-us/library/bb933972.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM