📄 oracledbutils.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;
using Qeb.Support.Common;
namespace Qeb.Support.DataAccess
{
internal sealed class OracleDBUtils:IDBUtils
{
// 数据库连接对象
private OracleConnection m_Conn;
// 事务对象
private OracleTransaction m_Trans;
// 连接字符串
private string m_ConnString;
// IDisposable参数
private bool m_Disposed;
// 事务是否已开启
public bool IsTransStart
{
get{
if (m_Trans == null || m_Trans.Connection == null)
return false;
else
return true;
}
}
#region 构造器
/// <summary>
/// 构造器
/// </summary>
/// <param name="connection">连接字符串</param>
public OracleDBUtils(string connection)
{
m_Conn = null;
m_Trans = null;
m_ConnString = connection;
m_Disposed = false;
}
#endregion
#region GetConection
private OracleConnection GetConnection()
{
if (m_Conn == null)
{
m_Conn = new OracleConnection(m_ConnString);
}
if (m_Conn.State == ConnectionState.Closed)
{
m_Conn.Open();
}
return m_Conn;
}
#endregion
#region ExecuteNonQuery
public int ExecuteNonQuery(IDbCommand dbCommand)
{
int ret = -1;
try
{
dbCommand.Connection = GetConnection();
ret = dbCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
string desc = "";
if (dbCommand == null)
desc = "dbCommand is null";
else
desc = dbCommand.CommandText;
AppLog.Add(new AppError(ex.Message, desc, this.GetType(), ex));
throw;
}
return ret;
}
#endregion
#region ExecuteScalar
public object ExecuteScalar(IDbCommand dbCommand)
{
object ret = null;
try
{
dbCommand.Connection = GetConnection();
ret = dbCommand.ExecuteScalar();
}
catch (Exception ex)
{
string desc = "";
if (dbCommand == null)
desc = "dbCommand is null";
else
desc = dbCommand.CommandText;
AppLog.Add(new AppError(ex.Message, desc, this.GetType(), ex));
throw;
}
return ret;
}
#endregion
#region GetNextID
public string GetNextID(string identity)
{
throw new Exception("未完成的方法");
}
#endregion
#region GetCurrentID
public string GetCurrentID(string identity)
{
throw new Exception("未完成的方法");
}
#endregion
public void Fill(DataTable table, IDbCommand dbCommand)
{
OracleDataAdapter adapter = null;
try
{
dbCommand.Connection = this.GetConnection();
adapter = new OracleDataAdapter((OracleCommand)dbCommand);
adapter.Fill(table);
}
catch (Exception ex)
{
string desc = "";
if (dbCommand == null)
desc = "dbCommand is null";
else
desc = dbCommand.CommandText;
AppLog.Add(new AppError(ex.Message, desc, this.GetType(), ex));
throw;
}
finally
{
if (adapter != null)
adapter.Dispose();
}
}
public void Fill(DataTable table, IDbCommand dbCommand, int pageIndex, int pageSize)
{
}
#region 事务控制
/// <summary>
/// 启动默认级别事务
/// </summary>
public void BeginTransaction()
{
BeginTransaction(IsolationLevel.ReadCommitted);
}
/// <summary>
/// 启动指定级别事务
/// </summary>
public void BeginTransaction(IsolationLevel level)
{
try
{
m_Conn = GetConnection();
m_Trans = m_Conn.BeginTransaction(level);
}
catch(Exception ex)
{
AppLog.Add(new AppError(ex.Message, "BeginTransaction出错", this.GetType(), ex));
throw;
}
}
/// <summary>
/// 提交事务
/// </summary>
public void Commit()
{
try
{
m_Trans.Commit();
}
catch (Exception ex)
{
AppLog.Add(new AppError(ex.Message, "Commit出错", this.GetType(), ex));
throw;
}
finally
{
if (m_Trans != null)
{
m_Trans.Dispose();
m_Trans = null;
}
}
}
/// <summary>
/// 回滚事务
/// </summary>
public void Rollback()
{
//catch (InvalidOperationException )
try
{
m_Trans.Rollback();
}
catch(Exception ex)
{
AppLog.Add(new AppError(ex.Message, "回滚事务出错", this.GetType(), ex));
throw;
}
finally
{
if (m_Trans != null)
{
m_Trans.Dispose();
m_Trans = null;
}
}
}
#endregion
public IDbCommand NewCommand()
{
return new OracleCommand();
}
public IDataParameter NewParameter()
{
return new OracleParameter();
}
public void CloseDB()
{
//关闭数据库前,如果存在未提交的事务则回滚
if (this.IsTransStart)
{
try
{
this.Rollback();
}
catch(Exception ex)
{
AppError error = new AppError(ex.Message, "关闭数据库连接前自动回滚事务出错", this.GetType(), ex);
AppLog.Add(error);
//不再抛出异常
}
finally
{
AppLog.Add("关闭数据库连接前有事务未处理,系统已自动回滚", LogEntryType.Warning, this.GetType());
}
}
try
{
if (m_Conn != null && m_Conn.State != ConnectionState.Closed)
m_Conn.Close();
}
catch (Exception ex)
{
AppError error = new AppError(ex.Message, "关闭数据库连接出错", this.GetType(), ex);
AppLog.Add(error);
//不再抛出异常
}
}
#region 销毁资源
/// <summary>
/// 销毁资源
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.m_Disposed)
{
if(disposing)
{
if (m_Conn != null)
{
m_Conn.Dispose();
m_Conn = null;
}
if (m_Trans != null)
{
m_Trans.Dispose();
m_Trans = null;
}
}
}
m_Disposed = true;
}
#endregion
}
}
//[MethodImpl(MethodImplOptions.Synchronized)]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -