我正在尝试使用WCF服务中的SqlFileStream对象来获取SQL Server2012 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))
{
...
}上面的代码会导致ups崩溃,但有一个例外:挂载的文件系统不支持扩展属性。
有人能给我解释一下我哪里做错了吗?
谢谢!
发布于 2014-02-28 02:54:09
如果您正在尝试使用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并使用OpenSqlFilestream http://technet.microsoft.com/en-us/library/bb933972.aspx访问FILESTREAM数据
https://stackoverflow.com/questions/16326177
复制相似问题