Tôi đang tạo nhà cung cấp tư cách thành viên tùy chỉnh cho ứng dụng asp.net của mình. Tôi cũng đã tạo ra một lớp riêng biệt "DBConnect" cung cấp chức năng cơ sở dữ liệu như thực hiện câu lệnh SQL, thực thi SP, thực thi SP hoặc truy vấn và trả về SqlDataReader và ...Cung cấp chức năng cơ sở dữ liệu tùy chỉnh cho nhà cung cấp tư cách thành viên asp.net tùy chỉnh
Tôi đã tạo ra thể hiện của lớp DBConnect trong Session_Start của Global.asax và được lưu trữ trong một phiên. Sau đó sử dụng một lớp tĩnh Tôi đang cung cấp chức năng cơ sở dữ liệu trong suốt ứng dụng bằng cách sử dụng cùng một phiên. Trong ngắn hạn tôi đang cung cấp một điểm duy nhất cho tất cả các hoạt động cơ sở dữ liệu từ bất kỳ trang asp.net nào.
Tôi biết rằng tôi có thể viết mã của riêng mình để kết nối/ngắt kết nối cơ sở dữ liệu và thực thi SP trong các phương thức tôi cần ghi đè. Hãy nhìn vào đoạn code dưới đây -
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.
}
....
}
vấn đề của tôi - Bây giờ những gì tôi cần là để thực hiện một phần cơ sở dữ liệu trong tất cả các phương pháp overriden từ cơ sở dữ liệu tương tự điểm như được mô tả ở trên cùng. Đó là tôi phải vượt qua thể hiện của DBConnect hiện có trong phiên này cho lớp này, để tôi có thể truy cập các phương thức.
Có ai có thể cung cấp giải pháp về vấn đề này không. Có thể có một số kỹ thuật tốt hơn tôi không biết điều đó. Cách tiếp cận tôi đang sử dụng có thể sai. Khen ngợi của bạn luôn được chào đón.
Cảm ơn bạn đã chia sẻ thời gian quý báu của mình.
Cảm ơn James! Tôi đã không chính xác theo cùng một cách để hoạt động cơ sở dữ liệu. Nhưng thay vì ChangePassword() như một thành viên của DBConnect, tôi cần thực hiện một phần nhỏ như SqlParameter [] p = new SqlParameter [3]; p [0] = new SqlParameter ("@ applicationName", applicationName); p [1] = new SqlParameter ("@ username", tên người dùng); p [2] = new SqlParameter ("@ mật khẩu", EncodePassword (newPassword)); bool retval = dbConn.ExecuteSP ("User_ChangePassword", p); trong lớp My MembershipProvider của tôi. – IrfanRaza
Mã đó phải đi trong kết nối db, các giá trị cho tham số sql phải được chuyển thành các tham số trên hàm tĩnh. Đừng lo lắng, mọi thứ sẽ chạy trong cùng một quá trình và các kết nối sẽ được gộp lại bởi ado.net. –