コード例 #1
0
        public int ExecuteSqlTran(List <CommandInfo> list, List <CommandInfo> oracleCmdSqlList)
        {
            int result;

            using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(this.connectionString))
            {
                sqlConnection.Open();
                System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand();
                sqlCommand.Connection = sqlConnection;
                System.Data.SqlClient.SqlTransaction sqlTransaction = sqlConnection.BeginTransaction();
                sqlCommand.Transaction = sqlTransaction;
                try
                {
                    foreach (CommandInfo current in list)
                    {
                        string commandText = current.CommandText;
                        System.Data.SqlClient.SqlParameter[] cmdParms = (System.Data.SqlClient.SqlParameter[])current.Parameters;
                        DbHelperSQLP.PrepareCommand(sqlCommand, sqlConnection, sqlTransaction, commandText, cmdParms);
                        if (current.EffentNextType == EffentNextType.SolicitationEvent)
                        {
                            if (current.CommandText.ToLower().IndexOf("count(") == -1)
                            {
                                sqlTransaction.Rollback();
                                throw new Exception("违背要求" + current.CommandText + "必须符合select count(..的格式");
                            }
                            object obj = sqlCommand.ExecuteScalar();
                            if (obj == null && obj == DBNull.Value)
                            {
                            }
                            bool flag = Convert.ToInt32(obj) > 0;
                            if (flag)
                            {
                                current.OnSolicitationEvent();
                            }
                        }
                        if (current.EffentNextType == EffentNextType.WhenHaveContine || current.EffentNextType == EffentNextType.WhenNoHaveContine)
                        {
                            if (current.CommandText.ToLower().IndexOf("count(") == -1)
                            {
                                sqlTransaction.Rollback();
                                throw new Exception("SQL:违背要求" + current.CommandText + "必须符合select count(..的格式");
                            }
                            object obj = sqlCommand.ExecuteScalar();
                            if (obj == null && obj == DBNull.Value)
                            {
                            }
                            bool flag = Convert.ToInt32(obj) > 0;
                            if (current.EffentNextType == EffentNextType.WhenHaveContine && !flag)
                            {
                                sqlTransaction.Rollback();
                                throw new Exception("SQL:违背要求" + current.CommandText + "返回值必须大于0");
                            }
                            if (current.EffentNextType == EffentNextType.WhenNoHaveContine && flag)
                            {
                                sqlTransaction.Rollback();
                                throw new Exception("SQL:违背要求" + current.CommandText + "返回值必须等于0");
                            }
                        }
                        else
                        {
                            int num = sqlCommand.ExecuteNonQuery();
                            if (current.EffentNextType == EffentNextType.ExcuteEffectRows && num == 0)
                            {
                                sqlTransaction.Rollback();
                                throw new Exception("SQL:违背要求" + current.CommandText + "必须有影响行");
                            }
                            sqlCommand.Parameters.Clear();
                        }
                    }
                    string conStr = PEIS.DBUtility.PubConstant.GetConnectionString("ConnectionStringPPC");
                    if (!OracleHelper.ExecuteSqlTran(conStr, oracleCmdSqlList))
                    {
                        sqlTransaction.Rollback();
                        throw new Exception("Oracle执行失败");
                    }
                    sqlTransaction.Commit();
                    result = 1;
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    sqlTransaction.Rollback();
                    throw ex;
                }
                catch (Exception ex2)
                {
                    sqlTransaction.Rollback();
                    throw ex2;
                }
            }
            return(result);
        }