禁用啓用oracle數據庫中所有約束(c#實現)

方法說明:先用sql語句將啓用/禁用各個約束的語句查詢出來,然後逐條執行。以下爲C#源代碼:


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OracleClient;

namespace SynDBDll
{
    public class DBOprtMgr
    {
        OracleConnection m_conn;
        public OracleConnection Conn { get { return m_conn; } }
        public DBOprtMgr(string connStr)
        {
            m_conn = new OracleConnection(connStr);
        }
        public bool ForbidAllConstants()
        {
            List<string> forbidStrs = new List<string>();
            if (!OpenConn()) return false;
            string forbitSqlStr = "select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'";//該語句能查詢出很多條sql語句,每條語句禁用一個約束 
            OracleCommand command = new OracleCommand(forbitSqlStr, m_conn);
            OracleDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                string onsStr = reader.GetValue(0).ToString();
                if (onsStr[onsStr.Length - 1] == ';')
                    onsStr = onsStr.Substring(0, onsStr.Length - 1);
                forbidStrs.Add(onsStr);
            }
            reader.Close();
            OracleTransaction theTransaction = Conn.BeginTransaction();
            try
            {
                foreach (string oneSqlStr in forbidStrs)
                    ExecuteCommand(oneSqlStr, theTransaction);
            }
            catch
            {
                theTransaction.Rollback();
                // 關閉數據庫連接
                m_conn.Close();
                return false;
            }
            theTransaction.Commit();
            // 關閉數據庫連接
            m_conn.Close();
            return true;
        }
        public bool RestartAllConstants()
        {
            List<string> restartStrs = new List<string>();
            if (!OpenConn()) return false;
            string restartSqlStr = "select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'";//該語句能查詢出很多條sql語句,每條語句啓用一個約束 
            OracleCommand command = new OracleCommand(restartSqlStr, m_conn);
            OracleDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                string onsStr = reader.GetValue(0).ToString();
                if (onsStr[onsStr.Length - 1] == ';')
                    onsStr = onsStr.Substring(0, onsStr.Length - 1);
                restartStrs.Add(onsStr);
            }
            reader.Close();


            OracleTransaction theTransaction = Conn.BeginTransaction();
            try
            {
                foreach (string oneSqlStr in restartStrs)
                    ExecuteCommand(oneSqlStr, theTransaction);
            }
            catch
            {
                theTransaction.Rollback();
                // 關閉數據庫連接
                m_conn.Close();
                return false;
            }
            theTransaction.Commit();
            // 關閉數據庫連接
            m_conn.Close();
            return true;
        }



        public void ExecuteCommand(string sqlStr, OracleTransaction theTransaction)
        {
            if (!OpenConn()) return;
            OracleCommand command = new OracleCommand(sqlStr, m_conn);
            command.Transaction = theTransaction;
            command.ExecuteNonQuery();
        }

        public bool OpenConn()
        {
            if (m_conn.State != ConnectionState.Open)
                m_conn.Open();
            if (m_conn.State != ConnectionState.Open)
            {
                Console.WriteLine("無法打開數據庫連接!");
                return false;
            }
            return true;
        }

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章