您的位置:首页 > 数据库 > Oracle

禁用启用oracle数据库中所有约束(c#实现)

2016-04-01 17:00 381 查看
方法说明:先用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;

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: