/******************************************************************************* * Copyright(c) 2019 dongke All rights reserved. / Confidential * 类的信息: * 1.程序名称:OracleDB.cs * 2.功能描述:操作oracle的简易ORM,提高编写效率,提高代码可读性 * 3.依赖:IDBConnection.cs,IDBTransaction.cs * 编辑履历: * 作者 日期 版本 修改内容 * 徐伟 2019-09-02 1.00 新建 *******************************************************************************/ using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Collections; using Dongke.IBOSS.PRD.WCF.DataModels; using Dongke.IBOSS.PRD.Basics.BaseResources; using Oracle.ManagedDataAccess.Client; namespace Dongke.IBOSS.PRD.Basics.DataAccess { public static class OracleDB { public static IDBTransaction GetConn() { return ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); } /// /// 通用SQL语句执行方法; /// 不指定数据连接时,默认执行单条语句,执行完毕直接提交; /// 指定数据连接时,可执行多条语句,默认不提交,通过指定commit提交事务; /// /// SQL语句 /// SQL参数 /// 数据连接 /// 是否提交 /// public static int ExecuteNonQuery(string sqlStr, IDataParameter[] sqlPara = null, IDBTransaction conn = null, bool commit = false) { int result = 0; try { if (conn == null) conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); if (conn.ConnState == ConnectionState.Closed) conn.Connect(); result = conn.ExecuteNonQuery(sqlStr, sqlPara); if (conn == null || commit) conn.Commit(); } catch (Exception e) { if (conn == null || commit) conn.Rollback(); throw e; } finally { if (conn == null || commit) if (conn.ConnState == ConnectionState.Open) conn.Disconnect(); } return result; } public static int ExecuteNonQuery(string sqlStr, ClientRequestEntity cre, IDBTransaction conn = null, bool commit = false) { return ExecuteNonQuery(sqlStr, GetParameter(cre), conn, commit); } /// /// 通用SQL语句执行方法,ServiceResultEntity格式; /// 不指定数据连接时,默认执行单条语句,执行完毕直接提交; /// 指定数据连接时,可执行多条语句,默认不提交,通过指定commit提交事务; /// /// SQL语句 /// SQL参数 /// 数据连接 /// 是否提交 /// public static ServiceResultEntity ExecuteNonQuerySRE(string sqlStr, IDataParameter[] sqlPara = null, IDBTransaction conn = null, bool commit = false) { ServiceResultEntity result = new ServiceResultEntity(); try { bool finish = (conn == null || commit) ? true : false; if (conn == null) conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString); if (conn.ConnState == ConnectionState.Closed) conn.Connect(); result.Result = conn.ExecuteNonQuery(sqlStr, sqlPara); result.Status = Constant.ServiceResultStatus.Success; result.Message = "操作成功!"; if (finish) conn.Commit(); } catch (Exception e) { if (conn == null || commit) conn.Rollback(); //result.Status = Constant.ServiceResultStatus.SystemError; //result.Status = "操作失败!"; //return result; throw e; } finally { if (conn.ConnState == ConnectionState.Open) conn.Disconnect(); } return result; } public static ServiceResultEntity ExecuteNonQuerySRE(string sqlStr, ClientRequestEntity cre, IDBTransaction conn = null, bool commit = false) { return ExecuteNonQuerySRE(sqlStr, GetParameter(cre), conn, commit); } /// /// 通用SQL语句执行方法,ServiceResultEntity格式; /// 不指定数据连接时,默认执行单条语句,执行完毕直接提交; /// 指定数据连接时,可执行多条语句,默认不提交,通过指定commit提交事务; /// /// 表名 /// 操作:insert,update,delete /// 字段键值对 /// 数据连接 /// 是否提交 /// public static ServiceResultEntity ExecuteNonQuerySRE(string tableName, string opt, IDataParameter[] sqlPara, IDBTransaction conn = null, bool commit = false) { string sqlStr = MakeSql(tableName, opt, sqlPara); return ExecuteNonQuerySRE(sqlStr, sqlPara, conn, commit); } public static ServiceResultEntity ExecuteNonQuerySRE(string tableName, string opt, ClientRequestEntity cre, IDBTransaction conn = null, bool commit = false) { string sqlStr = MakeSql(tableName, opt, GetParameter(cre)); return ExecuteNonQuerySRE(sqlStr, GetParameter(cre), conn, commit); } /// /// 通用SQL语句执行获取DataSet方法,ServiceResultEntity格式; /// /// SQL语句 /// SQL参数 /// public static ServiceResultEntity ExecuteDataSetSRE(string sqlStr, IDataParameter[] sqlPara = null) { IDBConnection conn = null; ServiceResultEntity result = new ServiceResultEntity(); try { conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); conn.Open(); result.Data = conn.GetSqlResultToDs(sqlStr, sqlPara); if (result.Data.Tables[0].Rows.Count == 0) result.Status = Constant.ServiceResultStatus.NoSearchResults; else result.Status = Constant.ServiceResultStatus.Success; result.Message = "操作成功!"; return result; } catch (Exception e) { //result.Status = Constant.ServiceResultStatus.SystemError; //result.Message = "操作失败!"; //return result; throw e; } finally { if (conn.ConnState == ConnectionState.Open) conn.Close(); } } public static ServiceResultEntity ExecuteDataSetSRE(string sqlStr, ClientRequestEntity cre) { return ExecuteDataSetSRE(sqlStr, GetParameter(cre)); } /// /// 通用SQL语句执行获取DataSet方法,ServiceResultEntity格式; /// /// SQL语句 /// SQL参数 /// public static ServiceResultEntity ExecuteDataSetSRE(string tableName, string opt, IDataParameter[] sqlPara, string orderBy = "") { string sqlStr = MakeSql(tableName, opt, sqlPara, orderBy); return ExecuteDataSetSRE(sqlStr, sqlPara); } public static ServiceResultEntity ExecuteDataSetSRE(string tableName, string opt, ClientRequestEntity cre, string orderBy = "") { string sqlStr = MakeSql(tableName, opt, GetParameter(cre), orderBy); return ExecuteDataSetSRE(sqlStr, GetParameter(cre)); } /// /// 通用SQL语句执行获取DataSet方法; /// /// SQL语句 /// SQL参数 /// public static DataSet ExecuteDataSet(string sqlStr, IDataParameter[] sqlPara = null) { IDBConnection conn = null; try { conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); conn.Open(); return conn.GetSqlResultToDs(sqlStr, sqlPara); } catch (Exception e) { throw e; } finally { if (conn.ConnState == ConnectionState.Open) conn.Close(); } } public static DataSet ExecuteDataSet(string sqlStr,ClientRequestEntity cre) { return ExecuteDataSet(sqlStr, GetParameter(cre)); } /// /// 通用SQL语句执行获取DataTable方法; /// /// SQL语句 /// SQL参数 /// public static DataTable ExecuteDataTable(string sqlStr, IDataParameter[] sqlPara = null) { IDBConnection conn = null; try { conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); conn.Open(); return conn.GetSqlResultToDt(sqlStr, sqlPara); } catch (Exception e) { throw e; } finally { if (conn.ConnState == ConnectionState.Open) conn.Close(); } } public static DataTable ExecuteDataTable(string sqlStr, ClientRequestEntity cre) { return ExecuteDataTable(sqlStr, GetParameter(cre)); } /// /// 通用SQL语句执行获取单行单列值方法; /// /// SQL语句 /// SQL参数 /// public static object ExecuteScalar(string sqlStr, IDataParameter[] sqlPara = null) { IDBConnection conn = null; try { conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString); conn.Open(); return conn.GetSqlResultToObj(sqlStr, sqlPara); } catch (Exception e) { throw e; } finally { if (conn.ConnState == ConnectionState.Open) conn.Close(); } } public static object ExecuteScalar(string sqlStr, ClientRequestEntity cre) { return ExecuteScalar(sqlStr, GetParameter(cre)); } /// /// 按IDataParameter定义的字段,生成sql语句,不支持多表关联,可用视图代替 /// /// 表名 /// 操作:insert、update、delete /// 字段键值对 /// public static string MakeSql(string tableName, string opt, IDataParameter[] sqlPara,string orderBy = "") { string sqlStr = ""; //生成插入语句 if (opt.ToLower() == "insert") { string insertField = ""; string insertValue = ""; for(int i=0;i= " + sqlPara[i].ParameterName; } else if (sqlPara[i].ParameterName.ToLower().IndexOf("max") + 3 == sqlPara[i].ParameterName.Length) { searchStr += sqlPara[i].ParameterName.ToString().Replace(":", "").Substring(0, sqlPara[i].ParameterName.Length - 4) + " <= " + sqlPara[i].ParameterName; } else { if (sqlPara[i].DbType == DbType.String) //字符串类型处理 searchStr += sqlPara[i].ParameterName.ToString().Replace(":", "") + " like '%' || " + sqlPara[i].ParameterName + " || '%'"; else //数值和bool类型处理 searchStr += sqlPara[i].ParameterName.ToString().Replace(":", "") + " = " + sqlPara[i].ParameterName; } } sqlStr += " where " + searchStr; } if (orderBy != "") sqlStr += " order by " + orderBy; } return sqlStr; } /// /// 将cre.Properties转换为IDataParameter[] /// /// ClientRequestEntity /// IDataParameter[] public static IDataParameter[] GetParameter(ClientRequestEntity cre) { if (cre.Properties.Count>0) { List para = new List(); foreach (var item in cre.Properties) { para.Add(new OracleParameter(":" + item.Key.ToString(), item.Value)); } return para.ToArray(); } else return null; } /// /// 获取表主键列名 /// /// 表名 /// 主键列名 public static string GetKey(string tableName) { object key = ExecuteScalar($@"SELECT column_name FROM user_cons_columns WHERE constraint_name = ( SELECT constraint_name FROM user_constraints WHERE table_name = '{tableName}' AND constraint_type = 'P' )"); return key is object ? key.ToString() : ""; } } }