コード例 #1
0
ファイル: MySqlConnection.cs プロジェクト: FelCore/FelCore
        public int ExecuteTransaction(SqlTransactionBase transaction)
        {
            if (transaction.Queries.Count == 0)
            {
                return(-1);
            }

            BeginTransaction();

            foreach (var query in transaction.Queries)
            {
                switch (query.Type)
                {
                case SQL_ELEMENT_PREPARED:
                {
                    var stmt = query.Element.Stmt;

                    if (!Execute(stmt !))
                    {
                        FEL_LOG_WARN("sql.sql", "Transaction aborted. {0} queries not executed.", transaction.Queries.Count);
                        var errorCode = GetLastError();
                        RollbackTransaction();
                        return(errorCode);
                    }
                    break;
                }

                case SQL_ELEMENT_RAW:
                {
                    var sql = query.Element.Query;
                    Assert(!string.IsNullOrEmpty(sql));
                    if (!Execute(sql !))
                    {
                        FEL_LOG_WARN("sql.sql", "Transaction aborted. {0} queries not executed.", transaction.Queries.Count);
                        var errorCode = GetLastError();
                        RollbackTransaction();
                        return(errorCode);
                    }
                    break;
                }
                }
            }

            // we might encounter errors during certain queries, and depending on the kind of error
            // we might want to restart the transaction. So to prevent data loss, we only clean up when it's all done.
            // This is done in calling functions DatabaseWorkerPool<T>::DirectCommitTransaction and TransactionTask::Execute,
            // and not while iterating over every element.

            CommitTransaction();
            return(0);
        }
コード例 #2
0
ファイル: SqlTransaction.cs プロジェクト: FelCore/FelCore
 public SqlTransactionTask(SqlTransactionBase trans)
 {
     _trans = trans;
 }
コード例 #3
0
ファイル: SqlTransaction.cs プロジェクト: FelCore/FelCore
 public SqlTransactionWithResultTask(SqlTransactionBase trans) : base(trans)
 {
 }