程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#用delegate實現AOP事務[C# | AOP | delegate](2)

C#用delegate實現AOP事務[C# | AOP | delegate](2)

編輯:關於C語言

輸出結果

Test
-------------------------------
DelegateMethod Start...
Test
DelegateMethod End...

我認為這也是一種AOP的方式,只是和傳統的不太一樣, 如果把調用方和被調用方看成客戶端和服務器的話,那麼傳統的AOP是施加在服務器端的,並在服務器端控制的,而現在我把這個權利交出來, 交給客戶端來控制,也就是由調用者來決定是不是要使用事務,也就是調用者自己決定用事務或非事務的方式來執行方法。請注意:如果到這 裡你不能接受我的想法請不必往下看了 : )

接下來我會把代碼貼全,注意代碼我都測試通過了的: )

SqlDAL.cs 把上篇文章拿 過來拷貝過來改把改把貼上來

       #region 
//事務
private SqlTransaction _SqlTrans;
//數據庫連接類
private SqlConnectionStringBuilder _ConnectionString = null;
#endregion
#region delegate
/// <summary>
/// 用於執行帶Dictionary參數無返回值的函數
/// </summary>
/// <param name="dict"></param>
public delegate void VOID_DICTIONARY_METHOD(Dictionary<string, object> dict);
#endregion
#region Method
#region ExecuteNonQuery
public int ExecuteNonQuery(string cmdText)
{
if (SqlTrans == null)
return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, CommandType.Text, cmdText);
else
return SqlHelper.ExecuteNonQuery(SqlTrans, CommandType.Text, cmdText);
}
public int ExecuteNonQuery(string cmdText, CommandType type)
{
if (SqlTrans == null)
return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, type, cmdText);
else
return SqlHelper.ExecuteNonQuery(SqlTrans, type, cmdText);
}
public int ExecuteNonQuery(string cmdText, CommandType type, params SqlParameter[] cmdParameters)
{
if (SqlTrans == null)
return SqlHelper.ExecuteNonQuery(ConnectionString.ConnectionString, type, cmdText, cmdParameters);
else
return SqlHelper.ExecuteNonQuery(SqlTrans, type, cmdText, cmdParameters);
}
#endregion
/// <summary>
/// 在事務中執行
/// </summary>
/// <param name="action"></param>
/// <param name="args"></param>
public void TransactionAction(Delegate delegateMethod, params object[] args)
{
SqlConnection SqlConnect = new SqlConnection(ConnectionString.ConnectionString);
SqlConnect.Open();
_SqlTrans = SqlConnect.BeginTransaction();
try
{
//數據庫操作
delegateMethod.DynamicInvoke(args);
//提交事務
_SqlTrans.Commit();
}
catch (SqlException)
{
_SqlTrans.Rollback();
//日志
}
finally
{
if (SqlTrans != null)
{
_SqlTrans.Dispose();
_SqlTrans = null;
}
if (SqlConnect != null)
SqlConnect.Close();
}
}
#endregion
#region PropertIEs
/// <summary>
/// 僅支持有事務時操作
/// </summary>
public SqlTransaction SqlTrans
{
get { return _SqlTrans; }
set { _SqlTrans = value; }
}
/// <summary>
/// 字符串連接
/// </summary>
public virtual SqlConnectionStringBuilder ConnectionString
{
get
{
if (_ConnectionString == null || string.IsNullOrEmpty(_ConnectionString.ConnectionString))
{
_ConnectionString = new SqlConnectionStringBuilder(Configurations.SQLSERVER_CONNECTION_STRING);
}
return _ConnectionString;
}
set { _ConnectionString = value; }
}
#endregion
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved