C#读取Oracle数据库

配置文件:

<add name="NewOracleDB"  providerName="System.Data.Oracle" connectionString="data source= (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.98)(PORT = 1801))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = rcccdb)
    )
  );user id=rkdfege;password=rkdfege"/>
/// <summary>
        /// 获取目标客户
        /// </summary>
        /// <param name="entryID"></param>
        /// <returns></returns> 
        [Data]
        public ActionResult GetExpTargetCustomer(ExpSearchModel expSearchModel)
        {
            var result = new List<ExpCustomerModel>();

            ExpCustomerService proc = new ExpCustomerService();
            List<CndModel> pars = new List<CndModel>();
            //pars.Add(new CndModel("CustomerID IS NOT NULL "));
            if (!string.IsNullOrWhiteSpace(expSearchModel.entryID))
            {
                pars.Add(new CndModel("EMPLOYEEID  like '%" + expSearchModel.entryID + "%' or EMPLOYEENAME like '%" + expSearchModel.entryID + "%' "));
            }
            pars.Add(new CndModel("EMPLOYEEID is not null and EMPLOYEENAME is not null "));

            result = proc.GetExpTargetCustomer(expSearchModel.pageSize, expSearchModel.page, pars, "order by EMPLOYEEID ");
            return Json(result, JsonRequestBehavior.AllowGet);
        }
/// <summary>
        /// 获取目标客户(可分页)
        /// </summary>
        /// <param name="entryID"></param>
        /// <returns></returns> 
        public List<ExpCustomerModel> GetExpTargetCustomer(int? pageSize, int? pageNumber, List<CndModel> pars, string orderStr)
        {
            string ConnStrPar = "NewOracleDB";
            string sqlParam = @"CustomerID,CustomerName";
            string sqlText = @"select employeeid as CustomerID,employeename as CustomerName  from zx_mbkhgl_dtl_v";

            var returnList = CommonHelper.GetOracleData<ExpCustomerModel>(sqlText, sqlParam, ConnStrPar, pageSize, pageNumber, pars, orderStr);

            //计算本条件下的总数
            var sqlNumText = @"select count(1) as TotalNum from zx_mbkhgl_dtl_v";
            var numModel = CommonHelper.GetOracleDataNum<ExpCustomerModel>(sqlNumText, ConnStrPar, pars);
            foreach (var item in returnList)
            {
                (item as ExpCustomerModel).CustomerGUID = Guid.NewGuid().ToString();
                (item as ExpCustomerModel).TotalNum = numModel[0].TotalNum;
            }

            return returnList;
        }
#region 读取Oracle数据库
        public static List<T> GetOracleData<T>(string sqlText, string sqlParam, string ConnStrPar, int? pageSize, int? pageNumber, List<CndModel> pars, string orderStr) where T : new()
        {
            if (string.IsNullOrWhiteSpace(sqlText) || string.IsNullOrWhiteSpace(ConnStrPar))
            {
                return null;
            }

            if (sqlText.IndexOf("rownum") < 0)
            {
                sqlText = sqlText.Replace("from", " ,rownum rn from ");
            }

            List<T> list = new List<T>();

            ///分页开始和结束行
            var startNum = (pageNumber - 1) * pageSize;
            var endNum = pageSize * pageNumber;
            if (startNum < 0)
                startNum = 0;
            if (endNum <= 0)
                endNum = 50;

            ///查询条件解析
            string sqlWhere = " where 1=1 ";
            if (pars != null)
            {
                foreach (CndModel par in pars)
                {
                    if (string.IsNullOrWhiteSpace(par.SqlWhere))
                        sqlWhere += " AND " + par.Name + par.LinkChar +
                            ((par.Value is string) ? "'" + par.Value.ToString() + "'"
                            : par.Value);
                    else sqlWhere += " AND " + par.SqlWhere;
                }
            }
            ///排序字段
            string sqlOrder = "";
            if (!string.IsNullOrWhiteSpace(orderStr))
            {
                sqlOrder += orderStr;
            }


            ///数据库连接实例  
            string connStr = ConfigurationManager.ConnectionStrings[ConnStrPar].ToString();
            string dbName = "";

            switch (ConnStrPar)
            {
                case "NewOracleDB":
                    dbName = "新系统";
                    break;
                case "OldOracleDB":
                    dbName = "老系统";
                    break;
                case "TravelOracleDB":
                    dbName = "出差申请系统";
                    break;
                default:
                    break;
            }


            ///表查询字符串
            string newSqlText = @"select * from 
                                (
                                  select " + sqlParam + ",rownum rn" + @" from 
                                  (
                                      " + sqlText + sqlWhere + sqlOrder + @" 
                                  )t 
                                ) 
                                where rn>" + startNum + " and rn<=" + endNum;

            OracleConnection conn = new OracleConnection(connStr);
            OracleCommand cmd = new OracleCommand(newSqlText, conn);

            ///判断数据库连接状态
            try
            {
                conn.Open();
            }
            catch (Exception ex)
            {
                EClaim.Common.Log.LogMsg("系统读取\\【数据库连接失败】", dbName + ", " + ex.Message);
                ExceptionHelper.GenException(dbName + " 数据库连接失败!","400", Telegnosis.Framework.Constants.Enums.ExceptionType.Biz);
                //throw new Exception(dbName + " 数据库连接失败!");
            }



            cmd.CommandType = System.Data.CommandType.Text;


            ///判断数据库语句问题
            try
            {
                using (OracleDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        list.Add(CreateObject<T>(dr));
                    }
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                EClaim.Common.Log.LogMsg("系统读取\\【数据库查询失败】", "数据库:" + dbName + ",SQL语句:" + newSqlText + ",错误信息" + ex.Message);
                ExceptionHelper.GenException(dbName + " 数据库查询失败!", "400", Telegnosis.Framework.Constants.Enums.ExceptionType.Biz);
            }


            return list;
        }

猜你喜欢

转载自blog.csdn.net/weixin_41392824/article/details/82153482