2012-01-18 2 views
0

페이지 매김을 사용하여 클라이언트 데이터의 GridView를 표시 할 페이지를 구성 중입니다. 내 aspx 페이지에는 DataSourceID가 ObjectDataSource로 설정된 GridView가 있습니다. ObjectDataSource는 BLL에 바인딩되며이 BLL은 DAL을 통해 데이터에 액세스합니다. 정적 인 데이터베이스를 가리키는 동안 나는 모든 것을 작동시켜야한다. 그러나 각 클라이언트의 데이터는 자체 데이터베이스에 저장됩니다. 다음 단계는 클라이언트 로그인에 따라 DAL의 ConnectionString을 수정하는 것입니다.런타임에 ASP.NET GridView -> BLL -> DAL의 연결 문자열 수정

ConnectionModifier 옵션을 'Public'으로 설정하여 DAL TableAdapter를 구성했습니다. 내 BLL은 DAL의 연결 문자열을 수정할 수 있지만 BLL 클라이언트 데이터베이스 이름을 전달하는 방법을 모르겠습니다.

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이 정보를 전달하는 방법에 딱하다.

답변

1

당신은

public class DataBaseNameProvider 
{ 
    public string GetDataBaseName() 
    { 
     var userName = Membership.GetUser().UserName; 
     return GetDatabaseNameByUserName(userName); 
    } 
} 

같은 이름을 기반으로 데이터베이스 이름을 반환합니다 데이터베이스 이름 공급자의 어떤 종류를 만들고 BLL에서 해당 클래스를 호출 할 수 있습니다.

종속성을 추가하고 싶지 않기 때문에 BLL에 ASP.NET 항목을 사용하고 싶지 않다면 BLL을 둘러싼 래퍼를 만들어서 멤버쉽을 인식하고 BLL을 만들 수 있습니다 거기에 사용자 이름을 전달합니다. Windows 인증을 사용하는 경우 완전히 사용할 수 있도록

0

, 당신은, 그것이 더 유연하게, 간단하게

ConfigurationManager.ConnectionStrings[WindowsIdentity.GetCurrent().Name] 

을 사용할 수 있습니다 그리고 각 사용자에 대한 전체 연결 문자열을 검색하는 것이 좋습니다 수 있습니다 필요한 경우 다른 유형의 데이터베이스.

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; 
    } 
    } 
} 

내가 다음 추가 매개 변수로 DB를 취할 GetBy/FillBy 기능을 수정하고, 그 값을 전달하기 위해 ObjectDataSource를 구성 : 내 BLL에 PDFDB 속성을 추가하고 결국 무엇

+0

이렇게하면 가장 관리하기 쉬운 솔루션이 아닌 각 클라이언트의 Web.config에 항목을 추가해야합니다. – Brandon