Sdílet prostřednictvím


GET_FILESTREAM_TRANSACTION_CONTEXT (Transact-SQL)

platí pro:SQL Server

Vrátí token, který představuje aktuální kontext transakce relace. Token používá aplikace k vytvoření vazby operací streamování systému souborů FILESTREAM k transakci. Seznam článků FILESTREAM najdete v tématu Data binárního velkého objektu (Blob) (SQL Server).

Transact-SQL konvence syntaxe

Syntaxe

GET_FILESTREAM_TRANSACTION_CONTEXT()

Návratové typy

varbinary(max)

Návratová hodnota

NULL je vrácena, pokud transakce nebyla spuštěna nebo byla zrušena nebo potvrzena.

Poznámky

Transakce musí být explicitní. Použijte BEGIN TRANSACTION následovaný COMMIT TRANSACTION nebo ROLLBACK TRANSACTION.

Při volání GET_FILESTREAM_TRANSACTION_CONTEXT, volající je udělen přístup systému souborů k transakci po dobu trvání transakce. Chcete-li povolit jinému uživateli přístup k transakci prostřednictvím systému souborů, použijte EXECUTE AS ke spuštění GET_FILESTREAM_TRANSACTION_CONTEXT jako druhý uživatel.

Examples

Následující příklad používá GET_FILESTREAM_TRANSACTION_CONTEXT v Transact-SQL transakce získat kontext transakce.

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);
        }
    }
}