FILESTREAM - 在FILESTREAM列

时间:2017-12-31 12:24:19

标签: .net sql-server sqlfilestream

我应该使用System.Data.SqlTypes.SqlFileStream来读写FILESTREAM列吗?

例如:

var sqlCommand = sqlConnection3.CreateCommand();
sqlCommand.CommandText = "Select FileData.PathName() As Path, GET_FILESTREAM_TRANSACTION_CONTEXT() As TransactionContext From PictureTable Where PkId = (Select Max(PkId) From PictureTable)"; 

var reader = sqlCommand.ExecuteReader();
reader.Read();
var filePath = (string)reader["Path"];
var transactionContext = (byte[])reader["TransactionContext"];
var sqlFileStream = new SqlFileStream(filePath, transactionContext, FileAccess.Read);
var data = new byte[sqlFileStream.Length];
sqlFileStream.Read(data, 0, Convert.ToInt16(sqlFileStream.Length));

在上面的代码中,我可以使用此处显示的查询并直接访问FileData

Select FileData From PictureTable Where PkId = (Select Max(PkId) From PictureTable)

如果不使用SqlFileStream并使用varbinary(max)进行读写,会发生什么?

当SQL Server和Application安装在单独的服务器上时,我在设置Windows身份验证时遇到了一些问题,无法访问SqlFileStream文件路径。我怎么能避免这个问题?

1 个答案:

答案 0 :(得分:2)

根据微软的文档,SqlFileStream是合适的解决方案(参见here)。 SqlFileStream处理文件句柄等其他内容,因为存储在文件流中的数据与存储在基于行的数据文件中的数据不同(请参阅here)。

希望这有帮助!