Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения:SQL Server
Возвращает токен, который представляет текущий контекст транзакции сеанса. Этот токен используется приложением для связывания потоковых операций FILESTREAM файловой системы с транзакцией. Список статей FILESTREAM см. в разделе "Двоичные большие объекты" (BLOB-объекты) (SQL Server).
Соглашения о синтаксисе Transact-SQL
Синтаксис
GET_FILESTREAM_TRANSACTION_CONTEXT()
Типы возвращаемых данных
varbinary(max)
Возвращаемое значение
NULL возвращается, если транзакция не была запущена или отменена или зафиксирована.
Замечания
Транзакция должна быть явной. Используйте BEGIN TRANSACTION за которыми следует COMMIT TRANSACTION или ROLLBACK TRANSACTION.
При вызове GET_FILESTREAM_TRANSACTION_CONTEXTвызывающий объект получает доступ к транзакции в файловой системе в течение длительности транзакции. Чтобы разрешить другому пользователю доступ к транзакции через файловую систему, используйте EXECUTE AS для запуска GET_FILESTREAM_TRANSACTION_CONTEXT от имени другого пользователя.
Примеры
В приведенном ниже примере инструкция GET_FILESTREAM_TRANSACTION_CONTEXT используется в транзакции Transact-SQL для получения контекста транзакции.
using System;
using System.Data.SqlClient;
using System.Data;
namespace ConsoleApplication
{
/// <summary>
/// This class is a wrapper that contains methods for:
///
/// GetTransactionContext() - Returns the current transaction context.
/// BeginTransaction() - Begins a transaction.
/// CommitTransaction() - Commits the current transaction.
///
/// </summary>
class SqlAccessWrapper
{
/// <summary>
/// Returns a byte array that contains the current transaction
/// context.
/// </summary>
/// <param name="sqlConnection">
/// SqlConnection object that represents the instance of SQL Server
/// from which to obtain the transaction context.
/// </param>
/// <returns>
/// If there is a current transaction context, the return
/// value is an Object that represents the context.
/// If there is not a current transaction context, the
/// value returned is DBNull.Value.
/// </returns>
public Object GetTransactionContext(SqlConnection sqlConnection)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
return cmd.ExecuteScalar();
}
/// <summary>
/// Begins the transaction.
/// </summary>
/// <param name="sqlConnection">
/// SqlConnection object that represents the server
/// on which to run the BEGIN TRANSACTION statement.
/// </param>
public void BeginTransaction(SqlConnection sqlConnection)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "BEGIN TRANSACTION";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
cmd.ExecuteNonQuery();
}
/// <summary>
/// Commits the transaction.
/// </summary>
/// <param name="sqlConnection">
/// SqlConnection object that represents the instance of SQL Server
/// on which to run the COMMIT statement.
/// </param>
public void CommitTransaction(SqlConnection sqlConnection)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "COMMIT TRANSACTION";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection;
cmd.ExecuteNonQuery();
}
}
class Program
{
static void Main(string[] args)
{
//Open a connection to the local instance of SQL Server.
SqlConnection sqlConnection = new SqlConnection("Integrated Security=true;server=(local)");
sqlConnection.Open();
SqlAccessWrapper sql = new SqlAccessWrapper();
//Create a transaction so that sql.GetTransactionContext() will succeed.
sql.BeginTransaction(sqlConnection);
//The transaction context will be stored in this array.
Byte[] transactionToken;
Object txObj = sql.GetTransactionContext(sqlConnection);
if (DBNull.Value != txObj)
{
transactionToken = (byte[])txObj;
Console.WriteLine("Transaction context obtained.\n");
}
sql.CommitTransaction(sqlConnection);
}
}
}