internal void RollbackImplicitTransaction()
        {
            if (HasImplicitTransaction && _transaction != null && _transaction.Transaction != null)
            {
                var transactionCount = Connection.InnerConnection.Database.TransactionCount;

                try
                {
                    _transaction.Rollback();
                }
                catch
                {
                    if (Connection.InnerConnection.Database.TransactionCount == transactionCount)
                    {
                        Connection.InnerConnection.Database.TransactionCount--;
                    }
                }
                finally
                {
                    _transaction.Dispose();
                    _transaction         = null;
                    _implicitTransaction = false;

                    if (_statement != null)
                    {
                        _statement.Transaction = null;
                    }
                }
            }
        }
        public void Rollback(Enlistment enlistment)
        {
            if (_transaction != null && !_transaction.IsUpdated)
            {
                _transaction.Rollback();
                _transaction = null;

                if (Completed != null)
                {
                    Completed(this, new EventArgs());
                }

                if (_connection != null)
                {
                    if (!_connection.Options.Pooling && (_connection.OwningConnection == null || _connection.OwningConnection.IsClosed))
                    {
                        _connection.Disconnect();
                    }
                }
                _connection        = null;
                _systemTransaction = null;

                // Declare done on the enlistment
                enlistment.Done();
            }
        }
        public void Rollback(Enlistment enlistment)
        {
            if (_transaction != null && !_transaction.IsCompleted)
            {
                _transaction.Rollback();
                _transaction = null;

                Completed?.Invoke(this, new EventArgs());

                if (_connection != null)
                {
                    if (!_connection.Options.Pooling && (_connection.OwningConnection == null || _connection.OwningConnection.IsClosed))
                    {
                        _connection.Disconnect(new AsyncWrappingCommonArgs(false)).GetAwaiter().GetResult();
                    }
                }
                _connection        = null;
                _systemTransaction = null;

                // Declare done on the enlistment
                enlistment.Done();
            }
        }
 private void DataBaseSendData(long IMEI, DateTime dt, int latitude, int longitude, int speed, FbConnection fb)
 {
     if ((latitude != 0) && (longitude != 0))
     {
         fbt = fb.BeginTransaction();
         using (
             var insertSQL = new FbCommand("insert into sms" +"(sms.IMEI, sms.DATE_, sms.TIME_, sms.LATITUDE, sms.LONGITUDE, sms.SPEED) values('"+ IMEI 
             + "','" + dt.ToShortDateString() 
             + "','" + dt.ToLongTimeString() 
             + "','" + latitude 
             + "','" + longitude 
             + "','" + speed 
             + "');", fb)) // using Firebird DB, FBCommand haven't method "AddWithValue".
         {
             if (fb.State == ConnectionState.Closed)
             {
                 fb.Open();
             }
             insertSQL.Transaction = fbt;
             try
             {
                 insertSQL.ExecuteNonQueryAsync();
                 fbt.Commit();
             }
             catch (Exception ex)
             {
                 fbt.Rollback();
                 Log.Add(ex.Message + "\r\n" + ex.Source + "\r\n" + ex.TargetSite);
             }
         }
     }
 }