C# 正在修改ASP.NET GridView的连接字符串->;BLL->;运行时的DAL
我正在构建一个页面来显示带有分页的客户端数据的GridView。我的aspx页面有一个GridView,它的DataSourceID设置为ObjectDataSource。ObjectDataSource绑定到BLL,BLL通过DAL访问数据。我在指向静态数据库时启动并运行了整个程序。但是,每个客户机的数据都存储在自己的数据库中。下一步是根据客户端登录修改DAL的ConnectionString 我已经将选项ConnectionModifier设置为“Public”配置了DAL TableAdapter。我的BLL可以修改DAL的连接字符串,但是我不知道如何将客户机数据库名称传递给BLLC# 正在修改ASP.NET GridView的连接字符串->;BLL->;运行时的DAL,c#,pagination,connection,objectdatasource,C#,Pagination,Connection,Objectdatasource,我正在构建一个页面来显示带有分页的客户端数据的GridView。我的aspx页面有一个GridView,它的DataSourceID设置为ObjectDataSource。ObjectDataSource绑定到BLL,BLL通过DAL访问数据。我在指向静态数据库时启动并运行了整个程序。但是,每个客户机的数据都存储在自己的数据库中。下一步是根据客户端登录修改DAL的ConnectionString 我已经将选项ConnectionModifier设置为“Public”配置了DAL TableAda
public class PDFDocumentsBLL {
private PDFTableAdapter _pdfdocumentsadapter = null;
protected PDFTableAdapter Adapter {
get {
if ( _pdfdocumentsadapter == null ) {
_pdfdocumentsadapter = new PDFTableAdapter();
_pdfdocumentsadapter.Connection = new System.Data.SqlClient.SqlConnection(
ConfigurationManager.ConnectionStrings["template"].ConnectionString.Replace( "TEMPLATE", "TESTCLIENT" )
);
}
return _pdfdocumentsadapter;
}
}
...
}
我想用一个变量替换上面代码中的字符串“TESTCLIENT”,但我不知道如何将此信息传递给BLL。您可以创建某种数据库名称提供程序,它将根据用户名返回数据库名称,如
public class DataBaseNameProvider
{
public string GetDataBaseName()
{
var userName = Membership.GetUser().UserName;
return GetDatabaseNameByUserName(userName);
}
}
从你的BLL给那个班打电话
如果您不想在BLL中使用ASP.NET内容,因为您不想添加额外的依赖项,那么您仍然可以在BLL周围创建一个包装器,该包装器将识别成员身份,并在那里创建您的BLL传递用户名。如果您使用的是Windows身份验证,那么您只需使用
ConfigurationManager.ConnectionStrings[WindowsIdentity.GetCurrent().Name]
为每个用户检索整个连接字符串可能是一种很好的做法,它使它更加灵活,因此如果需要,您可以使用完全不同类型的数据库。我最后要做的是在我的BLL中添加一个PDFDB属性:
public class PDFDocumentsBLL {
private PDFTableAdapter _pdfdocumentsadapter = null;
public string PDFDB = "PDF_TEMPLATE";
protected PDFTableAdapter Adapter {
get {
if ( _pdfdocumentsadapter == null ) {
_pdfdocumentsadapter = new PDFTableAdapter();
_pdfdocumentsadapter.Connection = new System.Data.SqlClient.SqlConnection(
ConfigurationManager.ConnectionStrings["pdf"].ConnectionString.Replace( "PDF_TEMPLATE", PDFDB )
);
}
return _pdfdocumentsadapter;
}
}
}
然后,我修改了GetBy/FillBy函数,将DB作为附加参数,并将ObjectDataSource配置为从会话变量传入该值。这需要为每个客户端向Web.config添加一个条目,而不是最易于管理的解决方案。