針對.NET SQLCommand類別進行靜態方法的擴充

因為需要進行資料庫稽核的關係,必須要於SQL Command中加入一些數位足跡,以便於讓資料庫記錄這些事情並可以日後被追蹤。

問題是,在沒有自製的資料庫元件的方案下,不可能在日後的所有的程式碼中,每一次都要記錄這些資料庫的足跡,因此,一個統一性的擴充性方法是必須的。以下就是這個擴充方法的程式碼。

namespace Slashlook
{
	public static class SqlExtension
	{
		public static void AddTrackableInformation(this System.Data.SqlClient.SqlCommand oSqlCmd)
		{
			//抓使用者
			string cUser = "";
			if (System.Web.HttpContext.Current.Session["User"] != null)
			{	cUser = System.Web.HttpContext.Current.Session["User"]; }
			else
			{	cUser = "null";	}
			//抓IP
			string cIP = ...省略...;
			//抓程式運行路徑
			string cURL = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
			//組合具備追蹤性之字串
			oSqlCmd.CommandText = oSqlCmd.CommandText + "\n-- User: " + cUser + "。\n-- IP: " + cIP + "。\n-- Path: " + cURL + "。\n";
			//傳回物件
			return oSqlCmd;
		}
	}
}

日後的引用就變得很簡單了,只要在資料指令送出前,加入這行指令即可:

<%@ Import Namespace="Slashlook" %>
System.Data.SqlClient.SqlCommand oCmd = new System.Data.SqlClient.SqlCommand();
oCmd.CommandText = "select * from AAA";
oCmd.AddTrackableInformation();	//這時候會被加入新的可追蹤資訊
C# StaticClassExtension