示例#1
0
 protected void OnBeforeTrans(InfoTransactionBeforeTransEventArgs value)
 {
     InfoTransactionBeforeTransEventHandler handler = (InfoTransactionBeforeTransEventHandler)Events[EventBeforeTrans];
     if ((handler != null) && (value is InfoTransactionBeforeTransEventArgs))
     {
         handler(this, (InfoTransactionBeforeTransEventArgs)value);
     }
 }
示例#2
0
        public Boolean Update(DataRow srcRow, DataTable srcSchema, String writeBackWherePart, IDbConnection connection, List<string> sqlSentences,
            IDbTransaction dbTrans)
        {
            Boolean b = true;

            //Boolean isTrans = false;
            //if (srcRow.RowState == DataRowState.Added)
            //{
            //    foreach (TimingType t in _timing)
            //    {
            //        if (t == TimingType.OnInsert)
            //        { isTrans = true; break; }
            //    }
            //}
            //if (srcRow.RowState == DataRowState.Deleted)
            //{
            //    foreach (TimingType t in _timing)
            //    {
            //        if (t == TimingType.OnDelete)
            //        { isTrans = true; break; }
            //    }
            //}
            //if (srcRow.RowState == DataRowState.Modified)
            //{
            //    foreach (TimingType t in _timing)
            //    {
            //        if (t == TimingType.OnUpdate)
            //        { isTrans = true; break; }
            //    }
            //}

            //if (isTrans == false)
            //{ return b; }

            // order.
            // Transactions.Sort(GetTransStepComparsion());

            Boolean c = false;
            Boolean d = false;
            foreach (Transaction t in _transactions)
            {
                if (srcRow.RowState == DataRowState.Added && t.WhenInsert == false)
                    continue;

                if (srcRow.RowState == DataRowState.Modified && t.WhenUpdate == false)
                    continue;

                if (srcRow.RowState == DataRowState.Deleted && t.WhenDelete == false)
                    continue;
                        InfoTransactionBeforeTransEventArgs args = new InfoTransactionBeforeTransEventArgs(t);

                        OnBeforeTrans(args);
                        if (args.Abort)
                        {
                            continue;
                        }
                TransSQLBuilder transSQLBuilder = new TransSQLBuilder(t, srcRow, srcSchema, writeBackWherePart);
                List<String> transSQLs = transSQLBuilder.GetTransSQL(connection, dbTrans);

                if (transSQLs != null && transSQLs.Count != 0)
                {
                    if (c == false)
                    {
                        c = true; d = true;
                    }

                    foreach (String transSQL in transSQLs)
                    {
                        IDbCommand command = connection.CreateCommand();
                        command.CommandText = transSQL;
                        if (dbTrans != null)
                        {
                            command.Transaction = dbTrans;
                            if (command.ExecuteNonQuery() == 0)
                            { throw new Exception(); /*b = false; break; */}
                        }
                        else
                        {
                            if (command.ExecuteNonQuery() == 0)
                            { b = false; break; }
                        }
                    }
                }

                String writeSQL = null;
                if (srcRow.RowState != DataRowState.Deleted)
                {
                    writeSQL = transSQLBuilder.GetWriteBackSQL(connection, dbTrans);
                }

                if (!string.IsNullOrEmpty(writeSQL))
                {
                    sqlSentences.Add(writeSQL);
                }

                if (writeSQL != null && writeSQL.Length != 0)
                {
                    if (c == false)
                    {
                        //InfoTransactionBeforeTransEventArgs args = new InfoTransactionBeforeTransEventArgs(t);
                        //OnBeforeTrans(args);
                        //if (args.Abort)
                        //{
                        //    continue;
                        //}
                        c = true; d = true;
                    }

                    IDbCommand command = connection.CreateCommand();
                    command.CommandText = writeSQL;

                    if (dbTrans != null) {
                        command.Transaction = dbTrans;
                        if (command.ExecuteNonQuery() == 0)
                        { throw new Exception(); /*b = false; break; */}
                    }
                    else {
                        if (command.ExecuteNonQuery() == 0)
                        { b = false; break; }
                    }
                }
            }

            if (d == true) {
                OnAfterTrans(new InfoTransactionAfterTransEventArgs());
            }

            return b;
        }