2009-06-19 9 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

実際に新しい接続文字列を使用するコードがありませんか? また、これはなぜwikiですか? –

+2

これはコミュニティのwikiであってはなりません。 – jason

+0

合意しました...完璧に良い質問です。 – Kev

答えて

10

あなたはapp.configファイルに格納された接続文字列を変更しようとしているように思えます。データコンテキストに引数のないコンストラクタを使用すると、設計時に構成されたものが読み込まれます。

のDataContextのコンストラクタに変更した接続文字列を注入してみてください。あなたはパラメータなしDataContextコンストラクタが使用する

DataContext db = new DataContext(myConnectionString); 

で特定の接続文字列を使用するように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); 
} } 
+0

あなたのアドバイス多くのあなたのアドバイスCleverCoder! –

6

DataContextコンストラクタにconnectionstringを送信することを忘れてしまいます。

例:

LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString); 
+1

コメントありがとうございました!それはおそらく私はおそらくそれを忘れている可能性があります。それを行う方法の例を教えていただけますか? –

+0

ああ、ちょっとあなたの問題の古いリビジョンを読みました。あなたの最後の文章は切り捨てられているようです。「私はいつも例外を受けています。ユーザー 'joe'のログインに失敗しました。 これは、新しく作成した接続文字列を指定しないと、使用しているdatacontextコンストラクタがConfigurationManager.ConnectionStringsコレクションに直接移動し、DBMLファイル(およびJoeのパスワードがconfigに保存されていない場合)。 – Ostemar

+0

コンストラクタに次のように渡します。 LINQTOSQLDataClassDataContext db = new LINQTOSQLDataClassDataContext(builder.ConnectionString); – Ostemar

4

最初にApp.configファイルの接続文字列を入力し、コンパイル時に接続文字列を設定します。

関連する問題