我正在爲我的asp.net應用程序創建自定義會員供應商。我還創建了一個單獨的類「DBConnect」,它提供了數據庫功能,如執行SQL語句,執行SP,執行SP或查詢並返回SqlDataReader等...向自定義asp.net會員供應商提供自定義數據庫功能
我在Session_Start中創建了DBConnect類的實例Global.asax並存儲到會話中。後來使用靜態類我使用相同的單個會話在整個應用程序中提供數據庫功能。總之,我爲任何asp.net頁面的所有數據庫操作提供單點。
我知道我可以編寫自己的代碼來連接/斷開數據庫,並從我需要覆蓋的方法中執行SP。請看下面的代碼 -
public class SGI_MembershipProvider : MembershipProvider
{
......
public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
if (!ValidateUser(username, oldPassword))
return false;
ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true);
OnValidatingPassword(args);
if (args.Cancel)
{
if (args.FailureInformation != null)
{
throw args.FailureInformation;
}
else
{
throw new Exception("Change password canceled due to new password validation failure.");
}
}
.....
//Database connectivity and code execution to change password.
}
....
}
我的問題 - 現在我需要的是來自同一個數據庫中的所有這些重寫的方法內執行數據庫部分如頂部所述。那就是我必須將會話中存在的DBConnect實例傳遞給此類,以便我可以訪問這些方法。
任何人都可以提供解決方案。可能有一些更好的技術我不知道。我正在使用的方法可能是錯誤的。你的建議總是受歡迎的。
感謝您分享寶貴的時間。
謝謝詹姆斯!對於數據庫功能,我不完全一樣。但是,作爲DBConnect的成員而不是ChangePassword(),我需要執行一小部分,如 SqlParameter [] p = new SqlParameter [3]; p [0] =新的SqlParameter(「@ applicationName」,applicationName); p [1] =新的SqlParameter(「@ username」,username); p [2] =新的SqlParameter(「@密碼」,EncodePassword(newPassword)); bool retval = dbConn.ExecuteSP(「User_ChangePassword」,p); 從我的MembershipProvider類。 – IrfanRaza 2010-04-14 09:29:24
該代碼必須在db連接中進行,sql參數的值必須作爲靜態函數的參數傳遞。別擔心,所有的東西都會在同一個過程中運行,並且連接會被ado.net合併。 – 2010-04-14 09:59:51