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;
}
浙公网安备 33010602011771号