代码之家  ›  专栏  ›  技术社区  ›  Michael Neale

如何使LINQ to SQL使用运行时正在修改的连接字符串?

  •  7
  • Michael Neale  · 技术社区  · 6 年前

    我正在尝试使用一些困难 Connection String Builders (ADO.NET) 在LINQ到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 回复  |  直到 16 年前
        1
  •  11
  •   CleverCoder    10 年前

    尝试将修改后的连接字符串注入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);
     } }
    
        2
  •  6
  •   Ostemar    16 年前

    您忘记将connectionstring发送到DataContext构造函数。

    LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString);
    
        3
  •  4
  •   Jason    16 年前

    你可以强制 DataContext 将特定连接字符串用于

    DataContext db = new DataContext(myConnectionString);
    

    数据上下文 构造函数将使用来自 App.config