2017-02-21 80 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; 

當它到達的地方拉使用字符串作爲鍵連接字符串行了,它給了我一個空引用異常。檢查css.ConnectionString收集後,唯一的連接字符串它有它看起來像這樣:

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

這顯然不在於它是在我的app.config文件,我知道有沒有其他的app.config文件在我DataAccess項目。在調試之後,我知道它正在尋找合適的組件。

爲什麼它給我這個連接字符串,而不是正確的?

+2

連接字符串需要存在於執行*的項目*中,而不是庫項目:例如它需要在你的Winforms項目的app.config中。 – Amy

+0

Ohhhhhhhhhhhhhhhhhhh那麼,這是有道理的。我改變我的代碼,並報告回來,如果它工作:) –

+2

庫中的app.configs僅供參考,或用於編譯時工具。但在運行時,只有正在執行的項目的app.config纔算數。 – Amy

回答

1

正如@Amy指出的,這是不工作的原因是因爲連接字符串沒有存儲在正在執行的程序集app.config文件中。移動之後,它現在可以正常工作。感謝您的快速幫助:)

0

您還可以使用machine.config文件來保存獨立於給定機器的任何應用程序的連接字符串。這樣,它們不必位於任何app.config文件中,因爲所有應用程序都會自動讀取正在執行的計算機上的machine.config文件。