Files
T-DAS/Epost.DAL/OrcaleDB.cs
2023-01-13 15:30:20 +08:00

412 lines
16 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
/// <summary>
/// 执行数据库查询操作,返回受影响的行数
/// </summary>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作影响的数据行数</returns>
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;
}
/// <summary>
/// 执行数据库事务查询操作,返回受影响的行数
/// </summary>
/// <param name="transaction">数据库事务对象</param>
/// <param name="cmdType">Command类型</param>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前事务查询操作影响的数据行数</returns>
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;
}
/// <summary>
/// 执行数据库查询操作,返回受影响的行数
/// </summary>
/// <param name="connection">Oracle数据库连接对象</param>
/// <param name="cmdType">Command类型</param>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作影响的数据行数</returns>
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;
}
/// <summary>
/// 执行数据库查询操作,返回OracleDataReader类型的内存结果集
/// </summary>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作返回的OracleDataReader类型的内存结果集</returns>
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;
}
}
/// <summary>
/// 执行数据库查询操作,返回DataSet类型的结果集
/// </summary>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作返回的DataSet类型的结果集</returns>
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;
}
/// <summary>
/// 执行数据库查询操作,返回DataTable类型的结果集
/// </summary>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作返回的DataTable类型的结果集</returns>
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;
}
/// <summary>
/// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
/// </summary>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
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;
}
/// <summary>
/// 执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值
/// </summary>
/// <param name="transaction">一个已存在的数据库事务对象</param>
/// <param name="commandType">命令类型</param>
/// <param name="commandText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
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;
}
/// <summary>
/// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值
/// </summary>
/// <param name="connection">数据库连接对象</param>
/// <param name="cmdType">Command类型</param>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
/// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns>
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;
}
/// <summary>
/// 执行数据库命令前的准备工作
/// </summary>
/// <param name="command">Command对象</param>
/// <param name="connection">数据库连接对象</param>
/// <param name="trans">事务对象</param>
/// <param name="cmdType">Command类型</param>
/// <param name="cmdText">Oracle存储过程名称或PL/SQL命令</param>
/// <param name="commandParameters">命令参数集合</param>
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);
}
}
/// <summary>
/// 将.NET日期时间类型转化为Oracle兼容的日期时间格式字符串
/// </summary>
/// <param name="date">.NET日期时间类型对象</param>
/// <returns>Oracle兼容的日期时间格式字符串如该字符串TO_DATE('2007-12-1','YYYY-MM-DD')</returns>
internal static string GetOracleDateFormat(DateTime date)
{
return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','YYYY-MM-DD')";
}
/// <summary>
/// 将.NET日期时间类型转化为Oracle兼容的日期格式字符串
/// </summary>
/// <param name="date">.NET日期时间类型对象</param>
/// <param name="format">Oracle日期时间类型格式化限定符</param>
/// <returns>Oracle兼容的日期时间格式字符串如该字符串TO_DATE('2007-12-1','YYYY-MM-DD')</returns>
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 + "')";
}
/// <summary>
/// 将指定的关键字处理为模糊查询时的合法参数值
/// </summary>
/// <param name="source">待处理的查询关键字</param>
/// <returns>过滤后的查询关键字</returns>
internal static string HandleLikeKey(string source)
{
if (source == null || source.Trim() == "") return null;
source = source.Replace("[", "[]]");
source = source.Replace("_", "[_]");
source = source.Replace("%", "[%]");
return ("%" + source + "%");
}
}
}