public ConnectionResult <SqlConnection, IOpenDataSource> OpenConnection()
        {
            var connection     = m_DataSource.CreateConnection();
            var openDataSource = m_DataSource.CreateOpenDataSource(connection);

            return(connection, openDataSource);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="SqlServerTransactionalDataSource"/> class.
        /// </summary>
        /// <param name="dataSource">The parent connection.</param>
        /// <param name="transactionName">Name of the transaction.</param>
        /// <param name="isolationLevel">The isolation level. If not supplied, will use the database default.</param>
        /// <param name="forwardEvents">If true, logging events are forwarded to the parent connection.</param>
        public SqlServerTransactionalDataSource(SqlServerDataSource dataSource, string transactionName, IsolationLevel?isolationLevel, bool forwardEvents) : base(new SqlServerDataSourceSettings() { DefaultCommandTimeout = dataSource.DefaultCommandTimeout, StrictMode = dataSource.StrictMode, SuppressGlobalEvents = dataSource.SuppressGlobalEvents || forwardEvents })
        {
            Name = dataSource.Name;

            m_BaseDataSource  = dataSource;
            m_Connection      = dataSource.CreateConnection();
            m_TransactionName = transactionName;

            if (isolationLevel == null)
            {
                m_Transaction = m_Connection.BeginTransaction(transactionName);
            }
            else
            {
                m_Transaction = m_Connection.BeginTransaction(isolationLevel.Value, transactionName);
            }

            if (forwardEvents)
            {
                ExecutionStarted  += (sender, e) => dataSource.OnExecutionStarted(e);
                ExecutionFinished += (sender, e) => dataSource.OnExecutionFinished(e);
                ExecutionError    += (sender, e) => dataSource.OnExecutionError(e);
                ExecutionCanceled += (sender, e) => dataSource.OnExecutionCanceled(e);
            }
            AuditRules = dataSource.AuditRules;
            UserValue  = dataSource.UserValue;
        }
    /// <summary>
    /// Initializes a new instance of the <see cref="SqlServerTransactionalDataSource"/> class.
    /// </summary>
    /// <param name="dataSource">The parent connection.</param>
    /// <param name="transactionName">Name of the transaction.</param>
    /// <param name="isolationLevel">The isolation level. If not supplied, will use the database default.</param>
    /// <param name="forwardEvents">If true, logging events are forwarded to the parent connection.</param>
    public SqlServerTransactionalDataSource(SqlServerDataSource dataSource, string?transactionName, IsolationLevel?isolationLevel, bool forwardEvents) : base(new SqlServerDataSourceSettings(dataSource, forwardEvents))
    {
        Name = dataSource.Name;

        m_BaseDataSource = dataSource ?? throw new ArgumentNullException(nameof(dataSource), $"{nameof(dataSource)} is null.");
        m_Connection     = dataSource.CreateConnection();
        TransactionName  = transactionName;

        if (isolationLevel == null)
        {
            m_Transaction = m_Connection.BeginTransaction(transactionName);
        }
        else
        {
            m_Transaction = m_Connection.BeginTransaction(isolationLevel.Value, transactionName);
        }

        if (forwardEvents)
        {
            ExecutionStarted  += (sender, e) => dataSource.OnExecutionStarted(e);
            ExecutionFinished += (sender, e) => dataSource.OnExecutionFinished(e);
            ExecutionError    += (sender, e) => dataSource.OnExecutionError(e);
            ExecutionCanceled += (sender, e) => dataSource.OnExecutionCanceled(e);
        }
        AuditRules = dataSource.AuditRules;
        UserValue  = dataSource.UserValue;
    }