Изменение строки подключения ASP.NET GridView -> BLL -> DAL во время выполнения - PullRequest
0 голосов
/ 19 января 2012

Я создаю страницу для отображения GridView данных клиента с нумерацией страниц. Моя страница aspx имеет GridView, чей DataSourceID установлен в ObjectDataSource. ObjectDataSource связан с BLL, который, в свою очередь, обращается к данным через DAL. У меня все это работает и работает, указывая на статическую базу данных. Однако данные каждого клиента хранятся в его собственной базе данных. Следующим шагом является изменение ConnectionString DAL в зависимости от имени клиента.

Я настроил адаптер таблиц DAL с параметром ConnectionModifier, установленным в «Public». Мой 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.

Ответы [ 3 ]

1 голос
/ 19 января 2012

Вы можете создать своего рода провайдера имени базы данных, который будет возвращать имя базы данных на основе имени пользователя, например

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

, и вызывать этот класс из своего BLL.

Если вы этого не сделаетекак идея использовать ASP.NET в вашей BLL, потому что вы не хотите добавлять дополнительную зависимость, вы все равно можете создать оболочку вокруг вашей BLL, которая будет поддерживать членство и создаст ваше имя пользователя BLL, передавая туда имя.

0 голосов
/ 19 января 2012

В результате я добавил свойство PDFDB к своему BLL:

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, чтобы использовать БД в качестве дополнительного параметра, и настроил ObjectDataSource для его передачи.значение из переменной Session.

0 голосов
/ 19 января 2012

Если вы используете проверку подлинности Windows, то вы можете просто использовать

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

. И это может быть хорошей практикой для извлечения всей строки подключения для каждого пользователя, это делает ее более гибкой, поэтому вы можете использоватьпри необходимости совершенно другой тип базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...