OracleHelper

很早就想写博客,又因为一些原因一直脱到现在,应公司项目要求写了一个oracleHelper并附带一些日志的输入

public class OracleHelper
    {
        protected TSunLog Log = CLog.GetInstance();
        private OracleConnection _Conn;
        private COracleParameter _server;

        public OracleHelper(COracleParameter server)
        {
            _server = server;
        }

        public OracleConnection Conn
        {
            get
            {
                if (_Conn == null)
                {
                    if (ConnectToOracle())
                        return _Conn;
                }
                else if (_Conn.State == ConnectionState.Closed)
                    _Conn.Open();
                return _Conn;
            }
            set
            {
                _Conn = value;
            }
        }

        private string ConnectionString
        {
            get
            {
                return string.Format("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVICE_NAME={2})));Persist Security Info=True;User ID={3};Password={4};", (object)_server.ServerIp, (object)_server.Port, (object)_server.DbName, (object)_server.UserName, (object)_server.Password);
            }
        }

        private bool ConnectToOracle()
        {
            bool flag;
            try
            {
                _Conn = new OracleConnection(ConnectionString);
                _Conn.Open();
                flag = true;
                Log.Debug("[CDbOracle][ConnectToOracle]:连接数据库成功!");
            }
            catch (Exception ex)
            {
                Log.Debug(string.Format("[CDbOracle][ConnectToOracle]:连接数据库失败!{0}", (object)ex.Message));
                flag = false;
            }
            return flag;
        }

        public void Close()
        {
            if (Conn == null)
                return;
            Conn.Close();
            Log.Debug("[CDbOracle][Close]:关闭数据库成功!");
        }

        private void CheckConnection()
        {
            if (Conn.State != ConnectionState.Closed)
                return;
            Conn.Open();
        }

        public int ExecuteMutliQuery(string commandText, string[][] dtData)
        {
            CheckConnection();
            int num = 0;
            using (OracleTransaction tran = Conn.BeginTransaction())
            {
                try
                {
                    foreach (string[] strArray in dtData)
                        num += ExecuteNonQuery(tran, commandText, (object[])strArray);
                    tran.Commit();
                }
                catch (Exception ex)
                {
                    Log.Debug("[CDbOracle][ExecuteMutliQuery]:" + ex.Message);
                    tran.Rollback();
                }
                finally
                {
                    Conn.Close();
                }
            }
            return num;
        }

        private int ExecuteNonQuery(OracleTransaction tran, string commandText, params object[] paramList)
        {
            if (tran == null)
            {
                Log.Debug("[CDbOracle][ExecuteNonQuery]:tran is null");
                return 0;
            }
            if (tran.Connection == null)
            {
                Log.Debug("[CDbOracle][ExecuteNonQuery]:tran.Connection is null");
                return 0;
            }
            using (IDbCommand command = (IDbCommand)tran.Connection.CreateCommand())
            {
                command.CommandText = commandText.Replace("@", ":");
                AttachParameters((OracleCommand)command, command.CommandText, paramList);
                if (tran.Connection.State == ConnectionState.Closed)
                    tran.Connection.Open();
                return command.ExecuteNonQuery();
            }
        }

        private OracleParameterCollection AttachParameters(OracleCommand cmd, string commandText, object[] paramList)
        {
            if (paramList == null || paramList.Length == 0)
                return (OracleParameterCollection)null;
            OracleParameterCollection parameters = cmd.Parameters;
            MatchCollection matchCollection = new Regex("(:)\\S*(.*?)\\b", RegexOptions.IgnoreCase).Matches(commandText.Substring(commandText.IndexOf(":")).Replace(",", " ,"));
            string[] strArray = new string[matchCollection.Count];
            int index1 = 0;
            foreach (Match match in matchCollection)
            {
                strArray[index1] = match.Value;
                ++index1;
            }
            int index2 = 0;
            foreach (object obj in paramList)
            {
                Type type = obj.GetType();
                OracleParameter oracleParameter = new OracleParameter();
                switch (type.ToString())
                {
                    case "DBNull":
                    case "Char":
                    case "SByte":
                    case "UInt16":
                    case "UInt32":
                    case "UInt64":
                        throw new SystemException("Invalid data type");
                    case "System.String":
                        oracleParameter.DbType = DbType.String;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)(string)paramList[index2];
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Byte[]":
                        oracleParameter.DbType = DbType.Binary;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)(byte[])paramList[index2];
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Int32":
                        oracleParameter.DbType = DbType.Int32;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)(int)paramList[index2];
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Int64":
                        oracleParameter.DbType = DbType.Int32;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)Convert.ToInt32(paramList[index2]);
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Boolean":
                        oracleParameter.DbType = DbType.Boolean;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)(bool)paramList[index2];
                        parameters.Add(oracleParameter);
                        break;
                    case "System.DateTime":
                        oracleParameter.DbType = DbType.DateTime;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)Convert.ToDateTime(paramList[index2]);
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Double":
                        oracleParameter.DbType = DbType.Double;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)Convert.ToDouble(paramList[index2]);
                        parameters.Add(oracleParameter);
                        break;
                    case "System.Decimal":
                        oracleParameter.DbType = DbType.Decimal;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)Convert.ToDecimal(paramList[index2]);
                        break;
                    case "System.Guid":
                        oracleParameter.DbType = DbType.Guid;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = (object)(Guid)paramList[index2];
                        break;
                    case "System.Object":
                        oracleParameter.DbType = DbType.Object;
                        oracleParameter.ParameterName = strArray[index2];
                        oracleParameter.Value = paramList[index2];
                        parameters.Add(oracleParameter);
                        break;
                    default:
                        throw new SystemException("Value is of unknown data type");
                }
                ++index2;
            }
            return parameters;
        }

        public int ExecuteNonSql(string strSql)
        {
            CheckConnection();
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = strSql;
            int num = command.ExecuteNonQuery();
            command.Dispose();
            Conn.Close();
            return num;
        }

        public int ExecuteNonSql(string strSql, object[] parameters)
        {
            CheckConnection();
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = strSql.Replace("@", ":");
            AttachParameters(command, command.CommandText, parameters);
            int num = command.ExecuteNonQuery();
            command.Dispose();
            Conn.Close();
            return num;
        }

        public bool ExecuteSql(List<string> strSqls)
        {
            CheckConnection();
            foreach (string strSql in strSqls)
                Log.Debug("[CDbOracle][ExecuteSql]:" + strSql);
            int num = 0;
            using (OracleCommand oracleCommand = new OracleCommand())
            {
                oracleCommand.Connection = Conn;
                using (OracleTransaction oracleTransaction = Conn.BeginTransaction())
                {
                    oracleCommand.Transaction = oracleTransaction;
                    try
                    {
                        for (int index = 0; index < strSqls.Count; ++index)
                        {
                            string str = strSqls[index].ToString();
                            if (str.Trim().Length > 1)
                            {
                                oracleCommand.CommandText = str;
                                num += oracleCommand.ExecuteNonQuery();
                            }
                        }
                        oracleTransaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        oracleTransaction.Rollback();
                        Log.Debug("[CDbOracle][ExecuteSql][Error]:" + ex.Message);
                    }
                }
            }
            return num > 0;
        }

        public bool ExecuteSql(string strSql)
        {
            CheckConnection();
            Log.Debug("[CDbOracle][ExecuteSql]:" + strSql);
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = strSql;
            int num = command.ExecuteNonQuery();
            command.Dispose();
            Conn.Close();
            return num > 0;
        }

        public bool ExecuteSql(string strSql, object[] parameters)
        {
            return ExecuteNonSql(strSql, parameters) > 0;
        }

        public object GetObject(string strSql)
        {
            CheckConnection();
            Log.Debug("[CDbOracle][GetObject]:" + strSql);
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = strSql;
            object obj = command.ExecuteScalar();
            command.Dispose();
            Conn.Close();
            Log.Debug(obj.ToString());
            return obj;
        }

        public string GetString(string strSql)
        {
            string str = GetObject(strSql).ToString();
            Log.Debug("[CDbOracle][GetString]:" + str);
            return str;
        }

        public List<string> GetStrList(string sql)
        {
            Log.Debug(sql);
            List<string> stringList = new List<string>();
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = sql;
            IDataReader dataReader = (IDataReader)command.ExecuteReader();
            while (dataReader.Read())
            {
                string sText = dataReader.GetString(0);
                Log.Debug(sText);
                stringList.Add(sText);
            }
            dataReader.Close();
            command.Dispose();
            return stringList;
        }

        public DataTable QuerySql(string sSql)
        {
            CheckConnection();
            Log.Debug("[CDbOracle][QuerySql]:" + sSql);
            OracleCommand command = Conn.CreateCommand();
            command.CommandText = sSql;
            OracleDataAdapter oracleDataAdapter = new OracleDataAdapter(command);
            DataSet dataSet = new DataSet();
            oracleDataAdapter.Fill(dataSet);
            oracleDataAdapter.Dispose();
            command.Dispose();
            return dataSet.Tables[0];
        }

        public DataTable QueryTable(string sql)
        {
            return QuerySql(sql);
        }

        public string ExecProcess(string processName, Dictionary<string, string> dicValue)
        {
            CheckConnection();
            string str;
            try
            {
                OracleCommand command = Conn.CreateCommand();
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = processName;
                foreach (KeyValuePair<string, string> keyValuePair in dicValue)
                {
                    if (keyValuePair.Value != null)
                    {
                        command.Parameters.Add(keyValuePair.Key, OracleDbType.NVarchar2).Direction = ParameterDirection.Input;
                        command.Parameters[keyValuePair.Key].Value = (object)keyValuePair.Value;
                    }
                    else
                        command.Parameters.Add(keyValuePair.Key, OracleDbType.Int32).Direction = ParameterDirection.Output;
                }
                command.ExecuteNonQuery();
                str = command.Parameters["res"].Value.ToString();
            }
            catch (Exception ex)
            {
                Log.Debug(ex);
                str = "-1";
            }
            return str;
        }
    }

猜你喜欢

转载自www.cnblogs.com/rongshen/p/9299546.html
今日推荐