using Epost.Common; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.OracleClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Epost.DAL { public class OrcaleDB { //数据库连接字符串 private readonly static string connstr = ConfigurationManager.ConnectionStrings["OraMidConnString"].ConnectionString; /// /// 执行数据库查询操作,返回受影响的行数 /// /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作影响的数据行数 internal static int ExecuteNonQuery(string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); int result = 0; try { PrepareCommand(command, connection, null, CommandType.Text, cmdText, commandParameters); result = command.ExecuteNonQuery(); command.Parameters.Clear(); } catch { //throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return result; } /// /// 执行数据库事务查询操作,返回受影响的行数 /// /// 数据库事务对象 /// Command类型 /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前事务查询操作影响的数据行数 internal static string ExecuteNonQueryProd(CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); int result = 0; string res = "1"; try { PrepareCommand(command, connection, null, cmdType, cmdText, commandParameters); result = command.ExecuteNonQuery(); command.Parameters.Clear(); string IN_SKU = command.Parameters["IN_SKU"].Value.ToString(); string OUT_Return_Code = command.Parameters["OUT_Return_Code"].Value.ToString(); if (!string.IsNullOrEmpty(OUT_Return_Code)) { if (OUT_Return_Code.Substring(0, 3) == "000") { LogHelper.WriteLogInfo("调用存储过程成功!!" + OUT_Return_Code); res = IN_SKU; } else { LogHelper.WriteLogInfo("调用存储过程失败!!" + OUT_Return_Code); res = "1"; } } return res; } catch(Exception ex) { LogHelper.WriteLogInfo("Oracle数据库执行错误:"+ex.Message); //throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return res; } /// /// 执行数据库查询操作,返回受影响的行数 /// /// Oracle数据库连接对象 /// Command类型 /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作影响的数据行数 internal static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { if (connection == null) throw new ArgumentNullException("当前数据库连接不存在"); OracleCommand command = new OracleCommand(); int result = 0; try { PrepareCommand(command, connection, null, cmdType, cmdText, commandParameters); result = command.ExecuteNonQuery(); command.Parameters.Clear(); } catch(Exception ex) { //throw; LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return result; } /// /// 执行数据库查询操作,返回OracleDataReader类型的内存结果集 /// /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作返回的OracleDataReader类型的内存结果集 internal static OracleDataReader ExecuteReader(string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); OracleDataReader reader = null; try { PrepareCommand(command, connection, null, CommandType.Text, cmdText, commandParameters); reader = command.ExecuteReader(CommandBehavior.CloseConnection); command.Parameters.Clear(); return reader; } catch(Exception ex) { command.Dispose(); connection.Close(); LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); return null; //throw; } } /// /// 执行数据库查询操作,返回DataSet类型的结果集 /// /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作返回的DataSet类型的结果集 internal static DataSet ExecuteDataSet(string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); DataSet dataset = null; try { PrepareCommand(command, connection, null, CommandType.Text, cmdText, commandParameters); OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; dataset = new DataSet(); adapter.Fill(dataset); command.Parameters.Clear(); } catch(Exception ex) { LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); //throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return dataset; } /// /// 执行数据库查询操作,返回DataTable类型的结果集 /// /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作返回的DataTable类型的结果集 internal static DataTable ExecuteDataTable(string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); DataTable table = null; try { PrepareCommand(command, connection, null, CommandType.Text, cmdText, commandParameters); OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; table = new DataTable(); adapter.Fill(table); command.Parameters.Clear(); } catch(Exception ex) { //throw; LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return table; } /// /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值 /// /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值 internal static object ExecuteScalar(string cmdText, params OracleParameter[] commandParameters) { OracleCommand command = new OracleCommand(); OracleConnection connection = new OracleConnection(connstr); object result = null; try { PrepareCommand(command, connection, null, CommandType.Text, cmdText, commandParameters); result = command.ExecuteScalar(); command.Parameters.Clear(); } catch { //throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return result; } /// /// 执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值 /// /// 一个已存在的数据库事务对象 /// 命令类型 /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值 internal static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters) { if (transaction == null) throw new ArgumentNullException("当前数据库事务不存在"); OracleConnection connection = transaction.Connection; if (connection == null) throw new ArgumentException("当前事务所在的数据库连接不存在"); OracleCommand command = new OracleCommand(); object result = null; try { PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters); result = command.ExecuteScalar(); command.Parameters.Clear(); } catch(Exception ex) { LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); // throw; } finally { transaction.Dispose(); command.Dispose(); connection.Close(); connection.Dispose(); } return result; } /// /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值 /// /// 数据库连接对象 /// Command类型 /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值 internal static object ExecuteScalar(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters) { if (connection == null) throw new ArgumentException("当前数据库连接不存在"); OracleCommand command = new OracleCommand(); object result = null; try { PrepareCommand(command, connection, null, cmdType, cmdText, commandParameters); result = command.ExecuteScalar(); command.Parameters.Clear(); } catch(Exception ex) { LogHelper.WriteLogInfo("Oracle数据库执行错误:" + ex.Message); //throw; } finally { command.Dispose(); connection.Close(); connection.Dispose(); } return result; } /// /// 执行数据库命令前的准备工作 /// /// Command对象 /// 数据库连接对象 /// 事务对象 /// Command类型 /// Oracle存储过程名称或PL/SQL命令 /// 命令参数集合 private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] commandParameters) { if (connection.State != ConnectionState.Open) connection.Open(); command.Connection = connection; command.CommandText = cmdText; command.CommandType = cmdType; if (trans != null) command.Transaction = trans; if (commandParameters != null) { foreach (OracleParameter parm in commandParameters) command.Parameters.Add(parm); } } /// /// 将.NET日期时间类型转化为Oracle兼容的日期时间格式字符串 /// /// .NET日期时间类型对象 /// Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE('2007-12-1','YYYY-MM-DD')) internal static string GetOracleDateFormat(DateTime date) { return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','YYYY-MM-DD')"; } /// /// 将.NET日期时间类型转化为Oracle兼容的日期格式字符串 /// /// .NET日期时间类型对象 /// Oracle日期时间类型格式化限定符 /// Oracle兼容的日期时间格式字符串(如该字符串:TO_DATE('2007-12-1','YYYY-MM-DD')) internal static string GetOracleDateFormat(DateTime date, string format) { if (format == null || format.Trim() == "") format = "YYYY-MM-DD"; return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','" + format + "')"; } /// /// 将指定的关键字处理为模糊查询时的合法参数值 /// /// 待处理的查询关键字 /// 过滤后的查询关键字 internal static string HandleLikeKey(string source) { if (source == null || source.Trim() == "") return null; source = source.Replace("[", "[]]"); source = source.Replace("_", "[_]"); source = source.Replace("%", "[%]"); return ("%" + source + "%"); } } }