OracleHelper操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Oracle.ManagedDataAccess.Client; using System.IO; using System.Configuration; namespace xxx.DBHelper { public static class OracleTools { /// <summary> /// 依据连接串名字connectionName返回数据连接字符串 /// </summary> /// <param name="connectionName">key值</param> /// <returns></returns> public static string GetConnectionStringsConfig(string connectionName) { //指定config文件读取 //获取Configuration对象 //winform的 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //web的 //Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); //根据Key读取<add>元素的Value return config.AppSettings.Settings[connectionName].Value; } #region [ 连接对象 ] /// <summary> /// 连接对象 字段 /// </summary> private static OracleConnection conn = null; /// <summary> /// 连接串 字段 /// </summary> //private static string connstr = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));User Id=leaf;Password=leaf;"; public static string connstr = ConfigurationManager.AppSettings["OracleConStr"].ToString(); //public static string connstr = GetConnectionStringsConfig("OracleConStr"); /// <summary> /// 取得连接串 /// </summary> public static string GetConnectionString { get { return connstr; } } /// <summary> /// 取得连接对象, 没有打开 /// </summary> public static OracleConnection GetOracleConnection { get { //return new OracleConnection(GetConnectionString); string conn = ConfigurationManager.AppSettings["OracleConStr"].ToString();// GetConnectionStringsConfig("OracleConStr"); return new OracleConnection(conn); } } /// <summary> /// 取得连接对象, 并打开 /// </summary> public static OracleConnection GetOracleConnectionAndOpen { get { OracleConnection conn = GetOracleConnection; conn.Open(); return conn; } } /// <summary> /// 彻底关闭并释放 OracleConnection 对象,再置为null. /// </summary> /// <param name="conn">OracleConnection</param> public static void CloseOracleConnection(OracleConnection conn) { if (conn == null) return; conn.Close(); conn.Dispose(); conn = null; } #endregion #region [ ExecuteNonQuery ] /// <summary> /// 普通SQL语句执行增删改 /// </summary> /// <param name="cmdText">SQL语句</param> /// <param name="commandParameters">可变参数</param> /// <returns>受影响行数</returns> public static int ExecuteNonQuery(string cmdText, params OracleParameter[] commandParameters) { return ExecuteNonQuery(cmdText, CommandType.Text, commandParameters); } /// <summary> /// 存储过程执行增删改 /// </summary> /// <param name="cmdText">存储过程</param> /// <param name="commandParameters">可变参数</param> /// <returns>受影响行数</returns> public static int ExecuteNonQueryByProc(string cmdText, params OracleParameter[] commandParameters) { return ExecuteNonQuery(cmdText, CommandType.StoredProcedure, commandParameters); } /// <summary> /// 执行增删改 /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="cmdType">命令类型</param> /// <param name="commandParameters">可变参数</param> /// <returns>受影响行数</returns> public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { int result = 0; OracleConnection conn = null; try { conn = GetOracleConnectionAndOpen; OracleCommand command = new OracleCommand(); PrepareCommand(command, conn, cmdType, cmdText, commandParameters); result = command.ExecuteNonQuery(); } catch (Exception ex) { result = -1; } finally { if (conn != null) CloseOracleConnection(conn); } return result; } #endregion #region [ ExecuteReader ] /// <summary> /// SQL语句得到 OracleDataReader 对象 /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns>OracleDataReader 对象</returns> public static OracleDataReader ExecuteReader(string cmdText, params OracleParameter[] commandParameters) { return ExecuteReader(cmdText, CommandType.Text, commandParameters); } /// <summary> /// 存储过程得到 OracleDataReader 对象 /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns>OracleDataReader 对象</returns> public static OracleDataReader ExecuteReaderByProc(string cmdText, params OracleParameter[] commandParameters) { return ExecuteReader(cmdText, CommandType.StoredProcedure, commandParameters); } /// <summary> /// 得到 OracleDataReader 对象 /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="cmdType">命令类型</param> /// <param name="commandParameters">可变参数</param> /// <returns>OracleDataReader 对象</returns> public static OracleDataReader ExecuteReader(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { OracleDataReader result = null; OracleConnection conn = null; try { conn = GetOracleConnectionAndOpen; OracleCommand command = new OracleCommand(); PrepareCommand(command, conn, cmdType, cmdText, commandParameters); result = command.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception ex) { result = null; } finally { if (conn != null) CloseOracleConnection(conn); } return result; } #endregion #region [ ExecuteScalar ] /// <summary> /// 执行SQL语句, 返回Object /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> Object </returns> public static Object ExecuteScalar(string cmdText, params OracleParameter[] commandParameters) { return ExecuteScalar(cmdText, CommandType.Text, commandParameters); } /// <summary> /// 执行存储过程, 返回Object /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> Object </returns> public static Object ExecuteScalarByProc(string cmdText, params OracleParameter[] commandParameters) { return ExecuteScalar(cmdText, CommandType.StoredProcedure, commandParameters); } /// <summary> /// 返回Object /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="cmdType">命令类型</param> /// <param name="commandParameters">可变参数</param> /// <returns> Object </returns> public static Object ExecuteScalar(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { Object result = null; OracleConnection conn = null; try { conn = GetOracleConnectionAndOpen; OracleCommand command = new OracleCommand(); PrepareCommand(command, conn, cmdType, cmdText, commandParameters); result = command.ExecuteScalar(); } catch (Exception ex) { result = null; } finally { if (conn != null) CloseOracleConnection(conn); } return result; } #endregion #region [ ExecuteDataSet ] /// <summary> /// 执行SQL语句, 返回DataSet /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataSet </returns> public static DataSet ExecuteDataSet(string cmdText, params OracleParameter[] commandParameters) { return ExecuteDataSet(cmdText, CommandType.Text, commandParameters); } /// <summary> /// 执行存储过程, 返回DataSet /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataSet </returns> public static DataSet ExecuteDataSetByProc(string cmdText, params OracleParameter[] commandParameters) { return ExecuteDataSet(cmdText, CommandType.StoredProcedure, commandParameters); } /// <summary> /// 返回DataSet /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="cmdType">命令类型</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataSet </returns> public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { DataSet result = null; OracleConnection conn = null; try { conn = GetOracleConnectionAndOpen; OracleCommand command = new OracleCommand(); PrepareCommand(command, conn, cmdType, cmdText, commandParameters); OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; result = new DataSet(); adapter.Fill(result); } catch (Exception ex) { result = null; //LogHelper.WriteLog(typeof(OracleTools), string.Format("连接oracle数据库出错:sql={2},Message={0},StackTrace={1}", ex.Message, ex.StackTrace, cmdText)); throw new Exception(string.Format("连接oracle数据库出错:sql={2},Message={0},StackTrace={1}", ex.Message, ex.StackTrace, cmdText)); } finally { if (conn != null) CloseOracleConnection(conn); } return result; } public static string GetYMD() { string day = DateTime.Now.Day.ToString(); return DateTime.Now.Year.ToString().Substring(2, 2) + (DateTime.Now.Month.ToString().Length == 1 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString()) + (day.Length == 1 ? "0" + day : day); } public static object ExecuteDataSet_self(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { string messge = string.Empty; object result = null; DataSet ds = new DataSet(); OracleConnection conn = null; try { conn = GetOracleConnectionAndOpen; OracleCommand command = new OracleCommand(); PrepareCommand(command, conn, cmdType, cmdText, commandParameters); OracleDataAdapter adapter = new OracleDataAdapter(); adapter.SelectCommand = command; //result = new DataSet(); adapter.Fill(ds); } catch (Exception ex) { messge = ex.Message; } finally { if (conn != null) CloseOracleConnection(conn); } if (messge.Length > 0) result = messge; else result = ds; return result; } #endregion #region [ ExecuteDataTable ] /// <summary> /// 执行SQL语句, 返回DataTable /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataTable </returns> public static DataTable ExecuteDataTable(string cmdText, params OracleParameter[] commandParameters) { return ExecuteDataTable(cmdText, CommandType.Text, commandParameters); } /// <summary> /// 执行存储过程, 返回DataTable /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataTable </returns> public static DataTable ExecuteDataTableByProc(string cmdText, params OracleParameter[] commandParameters) { return ExecuteDataTable(cmdText, CommandType.StoredProcedure, commandParameters); } /// <summary> /// 返回DataTable /// </summary> /// <param name="cmdText">命令字符串</param> /// <param name="cmdType">命令类型</param> /// <param name="commandParameters">可变参数</param> /// <returns> DataTable </returns> public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, params OracleParameter[] commandParameters) { DataTable dtResult = null; DataSet ds = ExecuteDataSet(cmdText, cmdType, commandParameters); if (ds != null && ds.Tables.Count > 0) { dtResult = ds.Tables[0]; } return dtResult; } #endregion #region [ PrepareCommand ] /// <summary> /// Command对象执行前预处理 /// </summary> /// <param name="command"></param> /// <param name="connection"></param> /// <param name="trans"></param> /// <param name="cmdType"></param> /// <param name="cmdText"></param> /// <param name="commandParameters"></param> private static void PrepareCommand(OracleCommand command, OracleConnection connection, CommandType cmdType, string cmdText, OracleParameter[] commandParameters) { if (connection.State != ConnectionState.Open) connection.Open(); command.Connection = connection; command.CommandText = cmdText; command.CommandType = cmdType; if (commandParameters != null) { foreach (OracleParameter parm in commandParameters) command.Parameters.Add(parm); } } #endregion /// <summary> /// 事务执行,返回字符串空时表示成功 /// </summary> /// <param name="comList"></param> /// <returns></returns> public static string ExecuteSqlWithTrans(List<OracleCommandInfo> comList) { using (OracleConnection conn = GetOracleConnectionAndOpen) { OracleTransaction trans = conn.BeginTransaction(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; cmd.Transaction = trans; try { int count = 0; for (int i = 0; i < comList.Count; i++) { cmd.CommandText = comList[i].CommandText; //存储过程 or Sql语句 if (comList[i].IsProc) cmd.CommandType = CommandType.StoredProcedure; else cmd.CommandType = CommandType.Text; if (comList[i].Parameters.Length > 0) { cmd.Parameters.Clear(); cmd.Parameters.AddRange(comList[i].Parameters); } count += cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); return string.Empty; } catch (Exception ex) { trans.Rollback(); return string.Format("Oracle执行事务出现异常,exception={0}", ex.ToString()); } } } } public class OracleCommandInfo { public string CommandText { get; set; } public bool IsProc { get; set; } public OracleParameter[] Parameters { get; set; } public OracleCommandInfo(string commandText, bool isProc) { CommandText = commandText; IsProc = isProc; } } }
<!--oracle数据库连接字符串-->
<add key="OracleConStr" value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.1.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User ID=xxx;Password=xxx;Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;Incr Pool Size=5; Decr Pool Size=1;"/>
使用示例:
public ResultModel AddOutBound(List<b_DataSync_OutBoundByTJDX> list) { var lstOracleCommandInfo = new List<OracleCommandInfo>(); var sql = @"insert into TPB_GWO_DX( TGD_ID ,TGD_PI_CODE ,TGD_PD_NAME ,TGD_PI_SPEC ,TGD_PI_SPEC1 ,TGD_DATE ,TGD_LOT ,TGD_EXP_DATE ,TGD_PRD_DATE ,TGD_UNIT ,TGD_QUAN ,TGD_PRICE ,TGD_AMOUNT ,TGD_DEPT_ID ,TGD_DEPT_NAME) values( :TGD_ID ,:TGD_PI_CODE ,:TGD_PD_NAME ,:TGD_PI_SPEC ,:TGD_PI_SPEC1 ,:TGD_DATE ,:TGD_LOT ,:TGD_EXP_DATE ,:TGD_PRD_DATE ,:TGD_UNIT ,:TGD_QUAN ,:TGD_PRICE ,:TGD_AMOUNT ,:TGD_DEPT_ID ,:TGD_DEPT_NAME )"; foreach (var item in list) { var lstParameter = new List<OracleParameter>(); lstParameter.Add(new OracleParameter(":TGD_ID", item.TGD_ID)); lstParameter.Add(new OracleParameter(":TGD_PI_CODE", item.TGD_PI_CODE)); lstParameter.Add(new OracleParameter(":TGD_PD_NAME", item.TGD_PD_NAME)); lstParameter.Add(new OracleParameter(":TGD_PI_SPEC", item.TGD_PI_SPEC)); lstParameter.Add(new OracleParameter(":TGD_PI_SPEC1", item.TGD_PI_SPEC1)); lstParameter.Add(new OracleParameter(":TGD_DATE", item.TGD_DATE)); lstParameter.Add(new OracleParameter(":TGD_LOT", item.TGD_LOT)); lstParameter.Add(new OracleParameter(":TGD_EXP_DATE", item.TGD_EXP_DATE)); lstParameter.Add(new OracleParameter(":TGD_PRD_DATE", item.TGD_PRD_DATE)); lstParameter.Add(new OracleParameter(":TGD_UNIT", item.TGD_UNIT)); lstParameter.Add(new OracleParameter(":TGD_QUAN", item.TGD_QUAN)); lstParameter.Add(new OracleParameter(":TGD_PRICE", item.TGD_PRICE)); lstParameter.Add(new OracleParameter(":TGD_AMOUNT", item.TGD_AMOUNT)); lstParameter.Add(new OracleParameter(":TGD_DEPT_ID", item.TGD_DEPT_ID)); lstParameter.Add(new OracleParameter(":TGD_DEPT_NAME", item.TGD_DEPT_NAME)); var oracleCommandInfo = new OracleCommandInfo(sql, false); oracleCommandInfo.Parameters = lstParameter.ToArray(); lstOracleCommandInfo.Add(oracleCommandInfo); } var message = OracleTools.ExecuteSqlWithTrans(lstOracleCommandInfo); return string.IsNullOrWhiteSpace(message) ? new ResultModel(1, "操作成功!") : new ResultModel(-1, message); } public DataTable GetPurchaseApplyData(DateTime startDate, DateTime? endDate) { string sql = @"select * from yxzb.vw_order where ORDERDATE > :StartDate "; if (endDate.HasValue) sql += " and ORDERDATE <= :EndDate "; List<OracleParameter> lstPt = new List<OracleParameter>(); lstPt.Add(new OracleParameter(":StartDate", startDate)); if (endDate.HasValue) lstPt.Add(new OracleParameter(":EndDate", endDate)); OracleParameter[] parameters = lstPt.ToArray(); DataTable dt = OracleTools.ExecuteDataTable(sql, parameters); return dt; }