Вопрос по linq-to-sql, sql-server, ado.net, c# – Как я могу заставить LINQ to SQL использовать строку подключения, которая изменяется во время выполнения?

7

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

the app.config file:

<?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>

and a snippet of the form:

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

On the other hand checking the Immediate Window:

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

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

Вам не хватает кода, который на самом деле использует новую строку подключения? Кроме того, почему это вики? Austin Salonen
Я сожалею об этом. Мой ответ таков: учитывая, что я не являюсь носителем английского языка, мне всегда нравится идея позволить другим редактировать мои вопросы, позволяя им улучшить его качество на благо всего сообщества stackoverflow, но это, вероятно, не очень хорошо причина. При этом, как я могу вернуться к «нормальному вопросу»? Nano Taboada
Это не должно быть сообщество вики. jason
Договорились ... совершенно хороший вопрос. Kev

Ваш Ответ

3   ответа
10

вы пытаетесь изменить строку подключения, которая хранится в файле 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);
 } }
Error: User Rate Limit Exceeded Nano Taboada
6

Пример:

LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString);
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Nano Taboada
Error: User Rate Limit Exceeded Nano Taboada
Error: User Rate Limit Exceeded Nano Taboada
Error: User Rate Limit Exceeded
4

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

DataContext db = new DataContext(myConnectionString);

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

Похожие вопросы