Я пытаюсь получить доступ к потоку файлов Sql из хранимой процедуры CLR. Я создал очень простую базу данных с одной таблицей, которая включает столбец filestream. Я могу успешно читать из файлового потока с помощью простого консольного приложения. Вот пример кода для сбоев proc:
[SqlProcedure]
public static void GetDataFromFileStream(string path, out int data)
{
using (var connection = new SqlConnection("context connection=true"))
{
connection.Open();
var transaction = connection.BeginTransaction();
var transactionContext = GetTransactionContext(connection, transaction);
// the following line throws an exception
var sqlFileStream = new SqlFileStream(path, transactionContext, FileAccess.Read);
var buffer = new byte[4];
sqlFileStream.Read(buffer, 0, 4);
data = BitConverter.ToInt32(buffer, 0);
}
}
private static byte[] GetTransactionContext(SqlConnection connection, SqlTransaction transaction)
{
using (var cmd = connection.CreateCommand())
{
const string myGetTxContextQuery = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()";
cmd.CommandText = myGetTxContextQuery;
cmd.CommandTimeout = 60;
cmd.CommandType = CommandType.Text;
cmd.Transaction = transaction;
return (byte[])cmd.ExecuteScalar();
}
}
При попытке создать экземпляр SqlFileStream выдается исключение:
Произошла исключительная ситуация System.ComponentModel.Win32Exception
Сообщение = "Запрос не поддерживается"
Источник = "System.Data"
ErrorCode = -2147467259
NativeErrorCode = 50
Кто-нибудь знает, что я делаю не так?