2009-06-19 12 views
7

我在嘗試在LINQ to SQL中使用Connection String Builders (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); 

O n個另一方面檢查即時窗口

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

我總是得到一個例外:用戶登錄失敗「喬」。有任何想法嗎?非常感謝。

+0

您是否缺少實際使用新連接字符串的代碼? 此外,爲什麼這是一個維基? – 2009-06-19 18:47:06

+2

這不應該是一個社區維基。 – jason 2009-06-19 19:01:27

+0

同意...完美的問題。 – Kev 2009-06-19 19:03:10

回答

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

您忘記將連接字符串發送到DataContext構造函數。

例子:

LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString); 
4

可以強制DataContext使用特定的連接字符串

DataContext db = new DataContext(myConnectionString); 

無參數DataContext構造方法將使用首先來自App.config文件的連接字符串,然後是在編譯時設置的連接字符串。

相關問題