2017-02-21 2 views
0

私は最終的にゲームになる単純なWinFormsアプリケーションを持っています。今、私はそれのデータアクセス層で作業しています。私は問題にぶつかりました。私はDataAccessという別のプロジェクトを作成しました。その中にローカルの.mdf SQL Serverデータベースファイルを作成しました。私はまた、接続文字列を格納するファイルapp.configを作成しました。C#ConfigurationManagerがapp.configから間違った接続文字列を取得します。

ここではその設定ファイルです:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
     <add name="TBG_Master" 
      connectionString="Data Source=(localdb)\MSSQLLocalDb;Integrated Security=true;AttachDbFileName=|DataDirectory|\TBG_Master.mdf" 
      providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
</configuration> 

私はthis質問から引かれたコードを使用していますapp.configファイルから接続文字列を取得するには。

Assembly service = Assembly.GetExecutingAssembly(); 
ConnectionStringsSection css = ConfigurationManager.OpenExeConfiguration(service.Location).ConnectionStrings; 
string cs = css.ConnectionStrings["TBG_Master"].ConnectionString; 
return cs; 

文字列をキーとして接続文字列をプルする行になると、null参照例外が返されます。

data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true 

これは、それが私のapp.configファイル内にあるものを明確にではない、と私は私のDataAccessプロジェクト内の他のapp.configファイルがありません知っている:css.ConnectionStringコレクション、唯一の接続文字列を調べた後、それはそれでこのようになりました。また、デバッグの後、私はそれが正しいアセンブリで探しているという事実を知っています。

なぜ私にこの接続文字列を与えて、正しいものではないのですか?

+2

接続文字列は、ライブラリプロジェクトではなく*を実行するプロジェクト*に存在する必要があります。 Winformsプロジェクトのapp.configにある必要があります。 – Amy

+0

Ohhhhhhhhhhhhhhhhhhhそれでは、それは理にかなっています。私のコードを変更して、それが正常に機能しているかどうかを報告してください:) –

+2

ライブラリ内のapp.configsは参照用またはコンパイル時のツール用です。しかし、実行時には、実行中のプロジェクトのapp.configだけがカウントされます。 – Amy

答えて

1

@Amyは、実行中のアセンブリapp.configファイルに接続文字列が格納されていなかったため、この機能が動作しなかった理由を指摘しました。それを動かした後、それは今通りに動作します。クイックヘルプありがとうございました:)

0

machine.configファイルを使用して、特定のマシンのアプリケーションとは関係ない接続文字列を保持することもできます。そうすれば、すべてのアプリケーションが実行中のマシン上のmachine.configファイルを自動的に読み取るため、app.configファイル内にある必要はありません。

関連する問題