抽象工厂设计模式(2)--OracleHelper

using Oracle.DataAccess.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OracleService
{
    class OracleHelper
    {
        public OracleHelper() { }


        #region 连接

        /// <summary>
        /// 连接字符串名,配置文件中的连接字符串名称
        /// </summary>
        private const String ConnectionStringName = "OracleCon";
        /// <summary>
        /// 连接字符串,其中包含源数据库名称和建立初始连接所需的其他参数。
        /// </summary>
        private static String _ConnectionString;
        /// <summary>
        /// 连接字符串,其中包含源数据库名称和建立初始连接所需的其他参数。
        /// </summary>
        private static String ConnectionString
        {
            get
            {
                if (String.IsNullOrEmpty(_ConnectionString))
                {
                    _ConnectionString = GetConnectionStringFromEnvironmentVariable();
                    if (String.IsNullOrEmpty(_ConnectionString))
                    {
                        ConnectionStringSettings connSettings = ConfigurationManager.ConnectionStrings[ConnectionStringName];
                        if (connSettings == null || String.IsNullOrEmpty(connSettings.ConnectionString))
                            throw new Exception("请确认连接字符串" + ConnectionStringName + "配置是否正确");
                        _ConnectionString = connSettings.ConnectionString;
                    }
                }
                return _ConnectionString;
            }
        }
        /// <summary>
        /// 从环境变更配置的配置文件中获取连接字符串
        /// </summary>
        /// <returns>连接字符串,查询失败时返回null</returns>
        private static String GetConnectionStringFromEnvironmentVariable()
        {
            String environmentVariableName = ConfigurationManager.AppSettings["连接字符串配置文件环境变量名"];
            if (String.IsNullOrEmpty(environmentVariableName))
                return null;
            String configPath = System.Environment.GetEnvironmentVariable(environmentVariableName, EnvironmentVariableTarget.Machine);
            if (String.IsNullOrEmpty(configPath))
                return null;

            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = configPath;

            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
            if (config.ConnectionStrings == null || !config.HasFile)
                return null;
            ConnectionStringSettings connSettings = config.ConnectionStrings.ConnectionStrings[ConnectionStringName];
            if (connSettings == null)
                return null;
            if (String.IsNullOrEmpty(connSettings.ConnectionString))
                return null;

            return connSettings.ConnectionString;
        }

        #endregion



        #region 获得参数对象
        /// <summary>
        ///  获得参数对象 
        /// </summary>
        /// <param name="paramName">参数名称</param>
        /// <param name="paramType">数据类型</param>
        /// <param name="paramValue">参数实值</param>
        /// <returns></returns>
        public static OracleParameter GetParameter(String paramName, DbType paramType, Object paramValue)
        {
            OracleParameter param = new OracleParameter(paramName, paramValue);
            param.DbType = paramType;
            return param;
        }

        /// <summary>
        /// 获得参数对象 
        /// </summary>
        /// <param name="paramName">参数名称</param>
        /// <param name="paramValue">参数实值</param>
        /// <returns></returns>
        public static OracleParameter GetParameter(string paramName, string paramValue)
        {
            OracleParameter param = new OracleParameter(paramName, paramValue);
            return param;
        }
        #endregion

        #region 执行SQL语句,返回执行行数
        /// <summary>
        /// 执行SQL语句,返回执行行数
        /// </summary>
        /// <param name="Sqlstr">SQL语句</param>
        /// <param name="param">参数对象数组</param>
        /// <returns></returns>
        public static int ExecuteSql(String Sqlstr, OracleParameter[] param)
        {

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                try
                {
                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = Sqlstr;
                    cmd.Parameters.AddRange(param);
                    conn.Open();
                    int i = cmd.ExecuteNonQuery();
                    conn.Close();
                    return i;
                }
                catch (Exception ex)
                {
                    WriteLog.Write("ExecuteSql修改数据库出错:" + ex.ToString());
                    return 0;
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        /// <summary>
        /// 执行SQL语句,返回执行行数
        /// </summary>
        /// <param name="Sqlstr">SQL语句</param>
        /// <param name="param">参数对象数组</param>
        /// <returns></returns>
        public static int ExecuteSql(String Sqlstr)
        {

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                try
                {
                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = Sqlstr;
                    conn.Open();
                    int i = cmd.ExecuteNonQuery();
                    conn.Close();
                    return i;
                }
                catch (Exception ex)
                {
                    WriteLog.Write("ExecuteSql修改数据库出错:" + ex.ToString());
                    return 0;
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        #endregion

        #region 执行SQL语句返回数据表
        /// <summary>
        /// 执行SQL语句并返回数据表
        /// </summary>
        /// <param name="Sqlstr">SQL语句</param>
        /// <returns></returns>
        public static DataTable ExecuteDt(String Sqlstr)
        {

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                try
                {
                    OracleDataAdapter da = new OracleDataAdapter(Sqlstr, conn);
                    DataTable dt = new DataTable();
                    conn.Open();
                    da.Fill(dt);
                    conn.Close();
                    return dt;
                }
                catch (Exception ex)
                {
                    WriteLog.Write("ExecuteDt查询数据库出错:" + ex.ToString());
                    return null;
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }

        }
        /// <summary>
        /// 执行SQL语句并返回数据表
        /// </summary>
        /// <param name="Sqlstr">SQL语句</param>
        /// <param name="param">参数对象列表</param>
        /// <returns></returns>
        public static DataTable ExecuteDt(String Sqlstr, OracleParameter[] param)
        {

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {
                try
                {
                    DataTable dt = new DataTable();
                    OracleDataAdapter da = new OracleDataAdapter();
                    OracleCommand cmd = new OracleCommand(Sqlstr, conn);
                    cmd.Connection = conn;
                    cmd.Parameters.AddRange(param);
                    da.SelectCommand = cmd;
                    conn.Open();
                    da.Fill(dt);
                    conn.Close();
                    return dt;
                }
                catch (Exception ex)
                {
                    WriteLog.Write("ExecuteDt查询数据库出错:" + ex.ToString());
                    return null;
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        #endregion

        /// <summary>
        /// 批量执行SQL语句
        /// </summary>
        /// <param name="Sqlstr">SQL语句数组</param>
        /// <param name="param">SQL参数对象数组</param>
        /// <returns></returns>
        public static Int32 ExecuteSqls(String[] Sqlstr, List<OracleParameter[]> param)
        {

            using (OracleConnection conn = new OracleConnection(ConnectionString))
            {

                OracleCommand cmd = new OracleCommand();
                OracleTransaction tran = null;
                cmd.Transaction = tran;
                try
                {
                    conn.Open();
                    tran = conn.BeginTransaction();
                    cmd.Connection = conn;
                    cmd.Transaction = tran;

                    Int32 count = Sqlstr.Length;
                    for (Int32 i = 0; i < count; i++)
                    {
                        cmd.CommandText = Sqlstr[i];
                        cmd.Parameters.AddRange(param[i]);
                        cmd.ExecuteNonQuery();
                    }
                    tran.Commit();
                    return 1;
                }
                catch
                {
                    tran.Rollback();
                    return 0;
                }
                finally
                {
                    cmd.Dispose();
                    conn.Close();
                }
            }
        }
    }
}

调用:

        /// <summary>
        /// 根据用户名ID,删除用户
        /// </summary>
        /// <param name="id">用户ID</param>
        /// <returns>受影响的行数</returns>
        public int DeleteUserByName(string id)
        {
            StringBuilder sqlSB = new StringBuilder();
            sqlSB.Append("delete from HT_OIL_USER where id=:id");
            OracleParameter[] pa ={
                        OracleHelper.GetParameter(":id", DbType.String, id)
                                  };
            return OracleHelper.ExecuteSql(sqlSB.ToString(), pa);
        }

        /// <summary>
        /// 获取所有的用户
        /// </summary>
        /// <returns></returns>
        public DataTable GetAllUser()
        {
            StringBuilder sqlSB = new StringBuilder();
            sqlSB.Append("select id,USERNAME,PASSWORD from HT_OIL_USER");
            sqlSB.Append(" Order by AddTime asc");
            return OracleHelper.ExecuteDt(sqlSB.ToString());
        }

猜你喜欢

转载自blog.csdn.net/wanglijia26/article/details/89314590