BEGIN TRANSACTION ; 
INSERT ....DELETE ....IF @error = 1 
BEGIN
ROLLBACK TRANSACTION ; 
RETURN ; 
ENDINSERT ....DELETE ....
COMMIT TRANSACTION ; 

解决方案 »

  1.   

    begin transaction
    --sql 语句if @@error=0
        commit transaction
    else
        rollback transaction
      

  2.   


     #region: 事物开始        /// <summary>
            /// 事物开始        /// </summary>
            public void DbBeginTrans()
            {            try
                {
                    if (_db_type == "ORACLE")
                    {
                        //    /*
                        //    if (_cn_ora.State != ConnectionState.Open)
                        //        _cn_ora.Open();
                        //    _trans_ora = _cn_ora.BeginTransaction(IsolationLevel.ReadCommitted);
                        //    _cm_ora.Transaction = _trans_ora;
                        //     */
                    }
                    else
                    {
                        if (_cn.State != ConnectionState.Open)
                            _cn.Open();
                        _trans = _cn.BeginTransaction(IsolationLevel.ReadCommitted);
                        _cm.Transaction = _trans;
                    }
                }
                catch (Exception e)
                {
                    _expmsg = e.Message;
                    _strErr = e.ToString();
                }
            }
            #endregion
            #region : Commit
            /// <summary>
            /// Commit
            /// </summary>
            public void DbCommit()
            {
                try
                {
                    if (_db_type == "ORACLE")
                    {
                        /*
                        _trans_ora.Commit();
                        _cn_ora.Close();
                         */
                    }
                    else
                    {
                        _trans.Commit();
                        _cn.Close();
                    }
                }
                catch (Exception e)
                {
                    string strErr;                strErr = e.ToString();
                    System.Console.Out.Write(strErr);
                }
            }
            #endregion        #region : 回滚
            /// <summary>
            /// 回滚
            /// </summary>
            public void DbRollback()
            {
                try
                {
                    if (_db_type == "ORACLE")
                    {
                        /*
                        _trans_ora.Rollback();
                        _cn_ora.Close();
                         */
                    }
                    else
                    {
                        _trans.Rollback();
                        _cn.Close();
                    }
                }
                catch (Exception e)
                {
                    _expmsg = e.Message;
                    _strErr = e.ToString();
                }
            }
            #endregion
      #region  初始化数据库
            /// <summary>
            /// 用途:创建数据库并初始化数据库
            /// </summary>
            /// <returns>true:创建或者初始化成功 false:创建或者初始化失败</returns>
            public bool replayDataBase()
            {
                //创建数据库
                try
                {
                    string myExecuteQuery = "create database LMS";
                    ComConfig config = new LMS.ComConfig();
                    SqlConnection mySqlConnection = new SqlConnection(config.connectionSimpleString);
                    SqlCommand myCommand = new SqlCommand(myExecuteQuery, mySqlConnection);
                    myCommand.Connection.Open();
                    myCommand.ExecuteNonQuery();
                    mySqlConnection.Close();
                }
                catch (System.Data.SqlClient.SqlException E)
                {
                    MessageBox.Show(E.Message);
                    return false;
                }
                System.Threading.Thread.Sleep(5000);//休眠5秒,否则由于时间问题读取不到这个数据库,初始化数据库报错
                //开始初始化数据库
                //读取资源文件InitDatabase.text add by gefangliang 2011-03-23
                clsInsertDate cp = new clsInsertDate();
                int rtn = 0;
                Assembly assem1 = this.GetType().Assembly;
                Stream steam1 = assem1.GetManifestResourceStream(@"LMS.InitDatabase.text");
                StreamReader reader1 = new StreamReader(steam1);
                string responseFromServer = reader1.ReadToEnd();
                //数据导入新版本系统中功能 add by gefangliang 2011-03-22
                ComDB db = new ComDB();
                db.DbBeginTrans();
                string strSQL = "";
                //文本按照go区分段落
                string[] strInitDatabase = Regex.Split(responseFromServer, @"(?i)\s*\ngo\s*\n?");
                for (int i = 0; i < strInitDatabase.Length; i++)
                {
                    strSQL = strInitDatabase[i];
                    rtn = db.DbExecuteReaderAgain(strSQL.ToString());
                    if (rtn == ComConst.FAILED)
                    {
                        db.DbRollback();//如果sql语句有误,回滚
                        MessageBox.Show("数据库创建失败,数据回滚完毕!", "数据库消息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        MessageBox.Show(strSQL, "错误代码", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return false;
                    }
                }
                db.DbCommit();
                MessageBox.Show("数据库初始化成功!", "数据库消息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return true;
            }
            #endregion