2017-11-25 2 views
1

SQL Serverを使用するWindowsフォームアプリケーションがあります。私は値C#sqlConnectionクラスは、引数接続文字列を動的に渡すときに接続文字列を受け入れません。

Data Source=17*.20*.1**.1\\SQLEXPRESS;Database=myDemoDB;User Id=sa;Password=somepassword 

を含むproperties.settings.default内(タイプstringの)接続文字列configエントリを持って、私は

SqlConnection sqlCon = new SqlConnection(Properties.Settings.Default.connectionString); 
sqlCon.open(); 

を使用している場合、これは見るためにここに行く、例外そのネットワークインスタンスのエラーがスローされますエラーのスクリーンショット

screenshot of exception.jpg

私は012として直接、接続文字列を使用している場合引数は次のようになります。

SqlConnection sqlCon = new SqlConnection("Data Source=17*.20*.1**.1\\SQLEXPRESS;Database=myDemoDB;User Id=sa;Password=somepassword"); 
sqlCon.open(); 

同じ例外がスローされます。

SqlConnection sqlCon = new SqlConnection(@"Data Source=17*.20*.1**.1\SQLEXPRESS;Database=myDemoDB;User Id=sa;Password=somepassword"); 
sqlCon.open(); 

も同じ例外をスローします。

しかし、以下のコードは正常に動作し、データベースに接続しています!私はここで何がうまくいかないのだろうか!

string a = "Data Source=17*.20*.1**.1\\SQLEXPRESS;Database=myDemoDB;User Id=sa;Password=somepassword"; 

SqlConnection sqlCon = new SqlConnection(a); 
sqlCon.open(); 

誰でもこのバグを修正できますか?接続文字列は動的な変更のためにテキストファイルから指定したいからです。

答えて

5

設定ファイルに入れる接続文字列は、設定ファイルの文字列をエスケープする必要がないという点で、「通常の」文字列リテラルに入れた接続文字列とは異なります。

問題を解決するには、コンフィギュレーションファイル内の文字列から二番目のスラッシュを削除します。「逐語」文字列リテラル(@接頭辞を持つすなわちもの)がバックスラッシュのエスケープを必要としないこと

connectionString="Source=17*.20*.1**.1\SQLEXPRESS;Database=myDemoDB;User Id=sa;Password=somepassword" 
//         ^

注ので、接続文字列は設定ファイルとプログラムで同じに見えます。