Example #1
0
        /// <summary>Executes a query that returns no results</summary>
        /// <param name="query">SQL query to execute</param>
        public void ExecuteNonQuery(string query)
        {
            if (!IsOpen)
            {
                fbDBConnection.Open();
            }
            if (IsOpen)
            {
                var transactionOptions = new FbTransactionOptions()
                {
                    TransactionBehavior = FbTransactionBehavior.Concurrency |
                                          FbTransactionBehavior.Wait |
                                          FbTransactionBehavior.NoAutoUndo
                };
                FbTransaction transaction = fbDBConnection.BeginTransaction(transactionOptions);
                query = AdjustQuotedFields(query);
                FbCommand myCmd = new FbCommand(query, fbDBConnection, transaction);
                myCmd.CommandType = CommandType.Text;

                try
                {
                    myCmd.ExecuteNonQuery();
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Dispose();
                    // this.CloseDatabase();
                    throw new FirebirdException("Cannot execute the SQL statement\r\n " + query + "\r\n" + ex.Message);
                }
                finally
                {
                    if (myCmd != null)
                    {
                        // transaction.Dispose();
                        myCmd.Dispose();
                        myCmd = null;
                    }
                }
            }
            else
            {
                throw new FirebirdException("Firebird database is not open.");
            }
        }
Example #2
0
    public FbTransaction BeginTransaction(FbTransactionOptions options, string transactionName)
    {
        EnsureActiveTransaction();

        try
        {
            _activeTransaction = new FbTransaction(_owningConnection, IsolationLevel.Unspecified);
            _activeTransaction.BeginTransaction(options);

            if (transactionName != null)
            {
                _activeTransaction.Save(transactionName);
            }
        }
        catch (IscException ex)
        {
            DisposeTransaction();
            throw FbException.Create(ex);
        }

        return(_activeTransaction);
    }
Example #3
0
    public async Task <FbTransaction> BeginTransactionAsync(FbTransactionOptions options, string transactionName, CancellationToken cancellationToken = default)
    {
        EnsureActiveTransaction();

        try
        {
            _activeTransaction = new FbTransaction(_owningConnection, IsolationLevel.Unspecified);
            await _activeTransaction.BeginTransactionAsync(options, cancellationToken).ConfigureAwait(false);

            if (transactionName != null)
            {
                _activeTransaction.Save(transactionName);
            }
        }
        catch (IscException ex)
        {
            await DisposeTransactionAsync(cancellationToken).ConfigureAwait(false);

            throw FbException.Create(ex);
        }

        return(_activeTransaction);
    }
Example #4
0
        private static FbTransactionOptions CreateTransactionOptions(IsolationLevel isolationLevel)
        {
            var transactionOptions = new FbTransactionOptions {
                WaitTimeout = TimeSpan.FromSeconds(10)
            };

            switch (SqlHelper.ReduceIsolationLevel(isolationLevel))
            {
            case IsolationLevel.ReadCommitted:
                transactionOptions.TransactionBehavior = FbTransactionBehavior.ReadCommitted
                                                         | FbTransactionBehavior.NoRecVersion
                                                         | FbTransactionBehavior.Write
                                                         | FbTransactionBehavior.NoWait;
                break;

            case IsolationLevel.Serializable:
                transactionOptions.TransactionBehavior = FbTransactionBehavior.Concurrency
                                                         | FbTransactionBehavior.Write
                                                         | FbTransactionBehavior.Wait;
                break;
            }

            return(transactionOptions);
        }
Example #5
0
        private FbTransaction GetTransaction(bool readable = true)
        {
            if (readable)
            {
                if (write_transaction != null)
                {
                    // if(conn.)
                    write_transaction.RollbackRetaining();
                    write_transaction.Dispose();
                }

                var tro = new FbTransactionOptions()
                {
                    TransactionBehavior = FbTransactionBehavior.Read | FbTransactionBehavior.ReadCommitted | FbTransactionBehavior.RecVersion
                };

                read_transaction = conn.BeginTransaction(tro);
                return(read_transaction);
            }
            else
            {
                if (read_transaction != null)
                {
                    read_transaction.CommitRetaining();
                    read_transaction.Dispose();
                }

                var tro = new FbTransactionOptions()
                {
                    TransactionBehavior = FbTransactionBehavior.NoWait | FbTransactionBehavior.ReadCommitted | FbTransactionBehavior.RecVersion
                };

                write_transaction = conn.BeginTransaction(tro);
                return(write_transaction);
            }
        }
Example #6
0
        /// <inheritdoc/>
        public override void BeginTransaction(IsolationLevel isolationLevel)
        {
            EnsureTrasactionIsNotActive();
            var transactionOptions = new FbTransactionOptions {
                WaitTimeout = TimeSpan.FromSeconds(10)
            };

            switch (SqlHelper.ReduceIsolationLevel(isolationLevel))
            {
            case IsolationLevel.ReadCommitted:
                transactionOptions.TransactionBehavior = FbTransactionBehavior.ReadCommitted
                                                         | FbTransactionBehavior.NoRecVersion
                                                         | FbTransactionBehavior.Write
                                                         | FbTransactionBehavior.NoWait;
                break;

            case IsolationLevel.Serializable:
                transactionOptions.TransactionBehavior = FbTransactionBehavior.Concurrency
                                                         | FbTransactionBehavior.Write
                                                         | FbTransactionBehavior.Wait;
                break;
            }
            activeTransaction = underlyingConnection.BeginTransaction(transactionOptions);
        }
		public FbTransaction BeginTransaction(FbTransactionOptions options, string transactionName)
		{
			lock (this)
			{
				if (this.HasActiveTransaction)
				{
					throw new InvalidOperationException("A transaction is currently active. Parallel transactions are not supported.");
				}

				try
				{
					this.activeTransaction = new FbTransaction(
						this.owningConnection, IsolationLevel.Unspecified);

					this.activeTransaction.BeginTransaction(options);

					if (transactionName != null)
					{
						this.activeTransaction.Save(transactionName);
					}
				}
				catch (IscException ex)
				{
					throw new FbException(ex.Message, ex);
				}
			}

			return this.activeTransaction;
		}
    private static TransactionParameterBuffer BuildTpb(FbTransactionOptions options)
    {
        var tpb = new TransactionParameterBuffer();

        tpb.Append(IscCodes.isc_tpb_version3);

        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Consistency))
        {
            tpb.Append(IscCodes.isc_tpb_consistency);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Concurrency))
        {
            tpb.Append(IscCodes.isc_tpb_concurrency);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Wait))
        {
            tpb.Append(IscCodes.isc_tpb_wait);
            if (options.WaitTimeoutTPBValue.HasValue)
            {
                tpb.Append(IscCodes.isc_tpb_lock_timeout, (short)options.WaitTimeoutTPBValue);
            }
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.NoWait))
        {
            tpb.Append(IscCodes.isc_tpb_nowait);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Read))
        {
            tpb.Append(IscCodes.isc_tpb_read);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Write))
        {
            tpb.Append(IscCodes.isc_tpb_write);
        }
        foreach (var table in options.LockTables)
        {
            int lockType;
            if (table.Value.HasFlag(FbTransactionBehavior.LockRead))
            {
                lockType = IscCodes.isc_tpb_lock_read;
            }
            else if (table.Value.HasFlag(FbTransactionBehavior.LockWrite))
            {
                lockType = IscCodes.isc_tpb_lock_write;
            }
            else
            {
                throw new ArgumentException("Must specify either LockRead or LockWrite.");
            }
            tpb.Append(lockType, table.Key);

            int?lockBehavior = null;
            if (table.Value.HasFlag(FbTransactionBehavior.Exclusive))
            {
                lockBehavior = IscCodes.isc_tpb_exclusive;
            }
            else if (table.Value.HasFlag(FbTransactionBehavior.Protected))
            {
                lockBehavior = IscCodes.isc_tpb_protected;
            }
            else if (table.Value.HasFlag(FbTransactionBehavior.Shared))
            {
                lockBehavior = IscCodes.isc_tpb_shared;
            }
            if (lockBehavior.HasValue)
            {
                tpb.Append((int)lockBehavior);
            }
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.ReadCommitted))
        {
            tpb.Append(IscCodes.isc_tpb_read_committed);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.Autocommit))
        {
            tpb.Append(IscCodes.isc_tpb_autocommit);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.RecVersion))
        {
            tpb.Append(IscCodes.isc_tpb_rec_version);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.NoRecVersion))
        {
            tpb.Append(IscCodes.isc_tpb_no_rec_version);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.RestartRequests))
        {
            tpb.Append(IscCodes.isc_tpb_restart_requests);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.NoAutoUndo))
        {
            tpb.Append(IscCodes.isc_tpb_no_auto_undo);
        }
        if (options.TransactionBehavior.HasFlag(FbTransactionBehavior.ReadConsistency))
        {
            tpb.Append(IscCodes.isc_tpb_read_consistency);
        }

        return(tpb);
    }
 internal async Task BeginTransactionAsync(FbTransactionOptions options, CancellationToken cancellationToken = default)
 {
     _transaction = await _connection.InnerConnection.Database.BeginTransactionAsync(BuildTpb(options), cancellationToken).ConfigureAwait(false);
 }
 internal void BeginTransaction(FbTransactionOptions options)
 {
     _transaction = _connection.InnerConnection.Database.BeginTransaction(BuildTpb(options));
 }
Example #11
0
        private TransactionParameterBuffer BuildTpb(FbTransactionOptions options)
        {
            TransactionParameterBuffer tpb = new TransactionParameterBuffer();

            tpb.Append(IscCodes.isc_tpb_version3);

            if ((options & FbTransactionOptions.Consistency) == FbTransactionOptions.Consistency)
            {
                tpb.Append(IscCodes.isc_tpb_consistency);
            }
            if ((options & FbTransactionOptions.Concurrency) == FbTransactionOptions.Concurrency)
            {
                tpb.Append(IscCodes.isc_tpb_concurrency);
            }
            if ((options & FbTransactionOptions.Shared) == FbTransactionOptions.Shared)
            {
                tpb.Append(IscCodes.isc_tpb_shared);
            }
            if ((options & FbTransactionOptions.Protected) == FbTransactionOptions.Protected)
            {
                tpb.Append(IscCodes.isc_tpb_protected);
            }
            if ((options & FbTransactionOptions.Exclusive) == FbTransactionOptions.Exclusive)
            {
                tpb.Append(IscCodes.isc_tpb_exclusive);
            }
            if ((options & FbTransactionOptions.Wait) == FbTransactionOptions.Wait)
            {
                tpb.Append(IscCodes.isc_tpb_wait);
            }
            if ((options & FbTransactionOptions.NoWait) == FbTransactionOptions.NoWait)
            {
                tpb.Append(IscCodes.isc_tpb_nowait);
            }
            if ((options & FbTransactionOptions.Read) == FbTransactionOptions.Read)
            {
                tpb.Append(IscCodes.isc_tpb_read);
            }
            if ((options & FbTransactionOptions.Write) == FbTransactionOptions.Write)
            {
                tpb.Append(IscCodes.isc_tpb_write);
            }
            if ((options & FbTransactionOptions.LockRead) == FbTransactionOptions.LockRead)
            {
                tpb.Append(IscCodes.isc_tpb_lock_read);
            }
            if ((options & FbTransactionOptions.LockWrite) == FbTransactionOptions.LockWrite)
            {
                tpb.Append(IscCodes.isc_tpb_lock_write);
            }
            if ((options & FbTransactionOptions.ReadCommitted) == FbTransactionOptions.ReadCommitted)
            {
                tpb.Append(IscCodes.isc_tpb_read_committed);
            }
            if ((options & FbTransactionOptions.Autocommit) == FbTransactionOptions.Autocommit)
            {
                tpb.Append(IscCodes.isc_tpb_autocommit);
            }
            if ((options & FbTransactionOptions.RecVersion) == FbTransactionOptions.RecVersion)
            {
                tpb.Append(IscCodes.isc_tpb_rec_version);
            }
            if ((options & FbTransactionOptions.NoRecVersion) == FbTransactionOptions.NoRecVersion)
            {
                tpb.Append(IscCodes.isc_tpb_no_rec_version);
            }
            if ((options & FbTransactionOptions.RestartRequests) == FbTransactionOptions.RestartRequests)
            {
                tpb.Append(IscCodes.isc_tpb_restart_requests);
            }
            if ((options & FbTransactionOptions.NoAutoUndo) == FbTransactionOptions.NoAutoUndo)
            {
                tpb.Append(IscCodes.isc_tpb_no_auto_undo);
            }

            return(tpb);
        }
Example #12
0
        private TransactionParameterBuffer BuildTpb(FbTransactionOptions options)
        {
            TransactionParameterBuffer tpb = new TransactionParameterBuffer();

            tpb.Append(IscCodes.isc_tpb_version3);

            FbTransactionOptions[] o = (FbTransactionOptions[])Enum.GetValues(options.GetType());
            for (int i = 0; i < o.Length; i++)
            {
                FbTransactionOptions option = ((FbTransactionOptions)(o[i]));
                if ((options & option) == option)
                {
                    switch (option)
                    {
                    case FbTransactionOptions.Consistency:
                        tpb.Append(IscCodes.isc_tpb_consistency);
                        break;

                    case FbTransactionOptions.Concurrency:
                        tpb.Append(IscCodes.isc_tpb_concurrency);
                        break;

                    case FbTransactionOptions.Shared:
                        tpb.Append(IscCodes.isc_tpb_shared);
                        break;

                    case FbTransactionOptions.Protected:
                        tpb.Append(IscCodes.isc_tpb_protected);
                        break;

                    case FbTransactionOptions.Exclusive:
                        tpb.Append(IscCodes.isc_tpb_exclusive);
                        break;

                    case FbTransactionOptions.Wait:
                        tpb.Append(IscCodes.isc_tpb_wait);
                        break;

                    case FbTransactionOptions.NoWait:
                        tpb.Append(IscCodes.isc_tpb_nowait);
                        break;

                    case FbTransactionOptions.Read:
                        tpb.Append(IscCodes.isc_tpb_read);
                        break;

                    case FbTransactionOptions.Write:
                        tpb.Append(IscCodes.isc_tpb_write);
                        break;

                    case FbTransactionOptions.LockRead:
                        tpb.Append(IscCodes.isc_tpb_lock_read);
                        break;

                    case FbTransactionOptions.LockWrite:
                        tpb.Append(IscCodes.isc_tpb_lock_write);
                        break;

                    case FbTransactionOptions.ReadCommitted:
                        tpb.Append(IscCodes.isc_tpb_read_committed);
                        break;

                    case FbTransactionOptions.Autocommit:
                        tpb.Append(IscCodes.isc_tpb_autocommit);
                        break;

                    case FbTransactionOptions.RecVersion:
                        tpb.Append(IscCodes.isc_tpb_rec_version);
                        break;

                    case FbTransactionOptions.NoRecVersion:
                        tpb.Append(IscCodes.isc_tpb_no_rec_version);
                        break;

                    case FbTransactionOptions.RestartRequests:
                        tpb.Append(IscCodes.isc_tpb_restart_requests);
                        break;

                    case FbTransactionOptions.NoAutoUndo:
                        tpb.Append(IscCodes.isc_tpb_no_auto_undo);
                        break;
                    }
                }
            }

            return(tpb);
        }
Example #13
0
    public FbTransaction BeginTransaction(FbTransactionOptions options, string transactionName)
    {
        CheckClosed();

        return(_innerConnection.BeginTransaction(options, transactionName));
    }
		/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="BeginTransaction(FbTransactionOptions)"]/*'/>
		public FbTransaction BeginTransaction(FbTransactionOptions options)
		{
			return this.BeginTransaction(options, null);
		}
Example #15
0
 public FbTransaction BeginTransaction(FbTransactionOptions options) => BeginTransaction(options, null);
		private	TransactionParameterBuffer BuildTpb(FbTransactionOptions options)
		{
			TransactionParameterBuffer tpb = new TransactionParameterBuffer();

			tpb.Append(IscCodes.isc_tpb_version3);

			if ((options & FbTransactionOptions.Consistency) ==	FbTransactionOptions.Consistency)
			{
				tpb.Append(IscCodes.isc_tpb_consistency);
			}
			if ((options & FbTransactionOptions.Concurrency) ==	FbTransactionOptions.Concurrency)
			{
				tpb.Append(IscCodes.isc_tpb_concurrency);
			}
			if ((options & FbTransactionOptions.Shared) == FbTransactionOptions.Shared)
			{
				tpb.Append(IscCodes.isc_tpb_shared);
			}
			if ((options & FbTransactionOptions.Protected) == FbTransactionOptions.Protected)
			{
				tpb.Append(IscCodes.isc_tpb_protected);
			}
			if ((options & FbTransactionOptions.Exclusive) == FbTransactionOptions.Exclusive)
			{
				tpb.Append(IscCodes.isc_tpb_exclusive);
			}
			if ((options & FbTransactionOptions.Wait) == FbTransactionOptions.Wait)
			{
				tpb.Append(IscCodes.isc_tpb_wait);
			}
			if ((options & FbTransactionOptions.NoWait) == FbTransactionOptions.NoWait)
			{
				tpb.Append(IscCodes.isc_tpb_nowait);
			}
			if ((options & FbTransactionOptions.Read) == FbTransactionOptions.Read)
			{
				tpb.Append(IscCodes.isc_tpb_read);
			}
			if ((options & FbTransactionOptions.Write) == FbTransactionOptions.Write)
			{
				tpb.Append(IscCodes.isc_tpb_write);
			}
			if ((options & FbTransactionOptions.LockRead) == FbTransactionOptions.LockRead)
			{
				tpb.Append(IscCodes.isc_tpb_lock_read);
			}
			if ((options & FbTransactionOptions.LockWrite) == FbTransactionOptions.LockWrite)
			{
				tpb.Append(IscCodes.isc_tpb_lock_write);
			}
			if ((options & FbTransactionOptions.ReadCommitted) == FbTransactionOptions.ReadCommitted)
			{
				tpb.Append(IscCodes.isc_tpb_read_committed);
			}
			if ((options & FbTransactionOptions.Autocommit) == FbTransactionOptions.Autocommit)
			{
				tpb.Append(IscCodes.isc_tpb_autocommit);
			}
			if ((options & FbTransactionOptions.RecVersion) == FbTransactionOptions.RecVersion)
			{
				tpb.Append(IscCodes.isc_tpb_rec_version);
			}
			if ((options & FbTransactionOptions.NoRecVersion) == FbTransactionOptions.NoRecVersion)
			{
				tpb.Append(IscCodes.isc_tpb_no_rec_version);
			}
			if ((options & FbTransactionOptions.RestartRequests) ==	FbTransactionOptions.RestartRequests)
			{
				tpb.Append(IscCodes.isc_tpb_restart_requests);
			}
			if ((options & FbTransactionOptions.NoAutoUndo) == FbTransactionOptions.NoAutoUndo)
			{
				tpb.Append(IscCodes.isc_tpb_no_auto_undo);
			}
			
			return tpb;
		}
		private TransactionParameterBuffer BuildTpb(FbTransactionOptions options)
		{
			TransactionParameterBuffer tpb = new TransactionParameterBuffer();

			tpb.Append(IscCodes.isc_tpb_version3);

			FbTransactionOptions[] o = (FbTransactionOptions[])Enum.GetValues(options.GetType());
			for (int i = 0; i < o.Length; i++)
			{
				FbTransactionOptions option = ((FbTransactionOptions)(o[i]));
				if ((options & option) == option)
				{
					switch (option)
					{
						case FbTransactionOptions.Consistency:
							tpb.Append(IscCodes.isc_tpb_consistency);
							break;

						case FbTransactionOptions.Concurrency:
							tpb.Append(IscCodes.isc_tpb_concurrency);
							break;

						case FbTransactionOptions.Shared:
							tpb.Append(IscCodes.isc_tpb_shared);
							break;

						case FbTransactionOptions.Protected:
							tpb.Append(IscCodes.isc_tpb_protected);
							break;

						case FbTransactionOptions.Exclusive:
							tpb.Append(IscCodes.isc_tpb_exclusive);
							break;

						case FbTransactionOptions.Wait:
							tpb.Append(IscCodes.isc_tpb_wait);
							break;

						case FbTransactionOptions.NoWait:
							tpb.Append(IscCodes.isc_tpb_nowait);
							break;

						case FbTransactionOptions.Read:
							tpb.Append(IscCodes.isc_tpb_read);
							break;

						case FbTransactionOptions.Write:
							tpb.Append(IscCodes.isc_tpb_write);
							break;

						case FbTransactionOptions.LockRead:
							tpb.Append(IscCodes.isc_tpb_lock_read);
							break;

						case FbTransactionOptions.LockWrite:
							tpb.Append(IscCodes.isc_tpb_lock_write);
							break;

						case FbTransactionOptions.ReadCommitted:
							tpb.Append(IscCodes.isc_tpb_read_committed);
							break;

						case FbTransactionOptions.Autocommit:
							tpb.Append(IscCodes.isc_tpb_autocommit);
							break;

						case FbTransactionOptions.RecVersion:
							tpb.Append(IscCodes.isc_tpb_rec_version);
							break;

						case FbTransactionOptions.NoRecVersion:
							tpb.Append(IscCodes.isc_tpb_no_rec_version);
							break;

						case FbTransactionOptions.RestartRequests:
							tpb.Append(IscCodes.isc_tpb_restart_requests);
							break;

						case FbTransactionOptions.NoAutoUndo:
							tpb.Append(IscCodes.isc_tpb_no_auto_undo);
							break;
					}
				}
			}

			return tpb;
		}
		internal void BeginTransaction(FbTransactionOptions options)
		{
			lock (this)
			{
				try
				{
					IDatabase database = this.connection.InnerConnection.Database;
					this.transaction = database.BeginTransaction(this.BuildTpb(options));
				}
				catch (IscException ex)
				{
					throw new FbException(ex.Message, ex);
				}
			}
		}
Example #19
0
 /// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="BeginTransaction(FbTransactionOptions)"]/*'/>
 public FbTransaction BeginTransaction(FbTransactionOptions options)
 {
     return(this.BeginTransaction(options, null));
 }
Example #20
0
    public Task <FbTransaction> BeginTransactionAsync(FbTransactionOptions options, string transactionName, CancellationToken cancellationToken = default)
    {
        CheckClosed();

        return(_innerConnection.BeginTransactionAsync(options, transactionName, cancellationToken));
    }
		/// <include file='Doc/en_EN/FbConnection.xml' path='doc/class[@name="FbConnection"]/method[@name="BeginTransaction(FbTransactionOptions, System.String)"]/*'/>
		public FbTransaction BeginTransaction(FbTransactionOptions options, string transactionName)
		{
			if (this.IsClosed)
			{
				throw new InvalidOperationException("BeginTransaction requires an open and available Connection.");
			}

			return this.innerConnection.BeginTransaction(options, transactionName);
		}
Example #22
0
 public Task <FbTransaction> BeginTransactionAsync(FbTransactionOptions options, CancellationToken cancellationToken = default) => BeginTransactionAsync(options, null, cancellationToken);