Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Zwraca token reprezentujący bieżący kontekst transakcji sesji. Token jest używany przez aplikację do powiązania operacji przesyłania strumieniowego systemu plików FILESTREAM z transakcją. Aby uzyskać listę artykułów FILESTREAM, zobacz Binary Large Object (Blob) Data (SQL Server).
Transact-SQL konwencje składni
Składnia
GET_FILESTREAM_TRANSACTION_CONTEXT()
Typy zwracane
varbinary(max)
Wartość zwracana
NULL Jest zwracany, jeśli transakcja nie została uruchomiona lub została anulowana lub zatwierdzona.
Uwagi
Transakcja musi być jawna. Użyj BEGIN TRANSACTION następującej po nim instrukcji COMMIT TRANSACTION lub ROLLBACK TRANSACTION.
Po wywołaniu GET_FILESTREAM_TRANSACTION_CONTEXTwywołania obiekt wywołujący otrzymuje dostęp systemu plików do transakcji przez czas trwania transakcji. Aby zezwolić innemu użytkownikowi na dostęp do transakcji za pośrednictwem systemu plików, użyj polecenia EXECUTE AS , aby uruchomić GET_FILESTREAM_TRANSACTION_CONTEXT go jako inny użytkownik.
Przykłady
W poniższym przykładzie użyto GET_FILESTREAM_TRANSACTION_CONTEXT w transakcji Transact-SQL w celu uzyskania kontekstu transakcji.
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);
}
}
}