Как я могу заставить LINQ to SQL использовать строку подключения, которая изменяется во время выполнения? - PullRequest
7 голосов
/ 19 июня 2009

Я экспериментирую с некоторыми трудностями, пытаясь использовать Построители строк подключения (ADO.NET) в LINQ to SQL. Позвольте показать вам, ребята, что я пытаюсь сделать:

файл app.config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="LoremIpsum"
             connectionString="Data Source=SomeServer;Initial Catalog=SomeDB;User ID=joe;"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

и фрагмент формы:

ConnectionStringSettings settings = 
    ConfigurationManager.ConnectionStrings["LoremIpsum"];
if (null != settings)
{
    string connection = settings.ConnectionString;
    SqlConnectionStringBuilder builder = 
         new SqlConnectionStringBuilder(connection);

    // passwordTextBox being the control where joe the user actually 
    // enters his credentials           
    builder.Password = passwordTextBox.Text;
}

LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext();

// finally some rather anecdotic LINQ sentence here:
var foo = db.Table.Single(bar => bar.Table == whatever);

С другой стороны, проверка Немедленное окно :

?builder.ConnectionString
"Data Source=SomeServer;Initial Catalog=SomeDB;User ID=joe;Password=swordfish"

Я всегда получаю исключение: не удалось войти в систему для пользователя 'joe'. Есть идеи? Большое спасибо заранее.

Ответы [ 3 ]

10 голосов
/ 19 июня 2009

Похоже, вы пытаетесь изменить строку подключения, которая хранится в файле app.config. Когда вы используете конструктор без аргументов для контекста данных, он читает то, что было настроено во время разработки.

Попробуйте вставить измененную строку подключения в конструктор DataContext:

ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["LoremIpsum"];
SqlConnectionStringBuilder builder;
LINQTOSQLDataClassDataContext db;

if (null != settings) 
{   
    string connection = settings.ConnectionString;  
    builder = new SqlConnectionStringBuilder(connection);

   // passwordTextBox being the control where joe the user actually enters his credentials

    builder.Password =passwordTextBox.Text;  
    db = new LINQTOSQLDataClassDataContext(builder.ConnectionString);
 } }
6 голосов
/ 19 июня 2009

Вы забыли отправить строку подключения в конструктор DataContext.

Пример:

LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString);
4 голосов
/ 19 июня 2009

Вы можете заставить DataContext использовать определенную строку соединения с

DataContext db = new DataContext(myConnectionString);

Конструктор DataContext без параметров сначала будет использовать строку подключения из файла App.config, а затем строку подключения, установленную во время компиляции.

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