Строка динамического подключения для строго типизированного набора данных

У меня есть приложение asp.net nTier. Уровень доступа к данным - это строго типизированный DataSet, состоящий из нескольких DataTable с DataAdapters. Когда пользователь входит в систему, он выбирает, к какой базе данных подключиться (из таблицы в базе данных членства). Мне нужно передать выбранную строку подключения в объект DataSet, который останется неизменным для этих пользователей, пока они снова не войдут в систему.

Я думаю, что ответ может заключаться в создании частичного класса объекта DataSet, в котором я могу передать строку подключения в конструктор. Я не знаю, как это сделать.

Ваше здоровье


person SausageFingers    schedule 20.01.2010    source источник


Ответы (2)


Вы можете сделать это с частичным классом.

Предполагая, что ваш типизированный набор данных называется HurrDurr:

public partial class HurrDurr
{
  public HurrDurr(string connex)
  {    
    this._connection = new global::System.Data.SqlClient.SqlConnection();
    this._connection.ConnectionString = connex;
  }
}

_connection инициализируется только в том случае, если он равен нулю при первом обращении к внутреннему свойству Connection.

person Community    schedule 20.01.2010
comment
Уилл, я попробовал ваше предложение на vb.net, но получаю сообщение об ошибке: Error 33 _connection 'не является членом DAL.ds1. Есть идеи, где я ошибаюсь? - person SausageFingers; 21.01.2010
comment
@fly Я понятия не имею, что такое файл .ds1. Вы можете взглянуть на код, созданный инструментом типизированного набора данных (разверните xsd и просмотрите файлы кода). Версия VB может сохранять соединение с другим именем переменной. - person ; 21.01.2010
comment
Извините, я должен был быть яснее. DAL.ds1 относится к имени проекта DAL и имени набора данных ds1. ds1 - это класс, созданный из xsd, я предполагаю, что это то, что вы называете HurrDurr. Посмотрев на код, я действительно вижу переменную члена _connection в адаптере таблицы? Это то, против чего мне нужно создать частичный класс? - person SausageFingers; 21.01.2010
comment
Вам нужно создать public partial class ds1 и в конструкторе создать SqlConnection с вашей новой строкой подключения и назначить его _connection. - person ; 21.01.2010

Наконец-то дошли до сути. В новом модуле я создал частичный класс для адаптера таблицы, в котором мне нужно было изменить строку подключения, одна ошибка, которую я делал изначально, заключалась в неправильном указании пространства имен.

Ниже представлен созданный мной частичный класс, который позволил мне динамически изменять строку подключения одного из моих адаптеров таблиц для таблицы с именем tblOptions:

Namespace ds1TableAdapters
    Partial Public Class tblOptionsTableAdapter
        Sub ChangeConnString(ByVal newConn As String)
            Me._connection.ConnectionString = newConn
        End Sub
    End Class
End Namespace

Спасибо за помощь, Уилл, это помогло мне двигаться в правильном направлении.

person SausageFingers    schedule 25.01.2010