2017-05-18 78 views
-3

我正在開發一個項目,它是基於Windows的.NET應用程序。我想製作一個相對路徑,以便當我將文件移動到另一臺計算機時,我不會再次建立新的連接。在app.config中使用相對連接字符串的.NET Windows應用程序

到目前爲止,這是我所做的。

在我的app.config

<connectionStrings> 
    <add name="ConString" 
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\dbOffense.mdf;Integrated Security=True;Connect Timeout=30" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

在我的計劃。代碼沒有任何功能。它是全球宣佈的。

Dim constr As String=ConfigurationManager.ConnectionStrings("ConString").ConnectionString() 
Dim con As New SqlConnection(constr) 

我的數據庫dbOffense.mdf位於同一文件夾作爲我的Windows應用程序OffenseDatabase。它不在我應用程序的.exe文件所在的文件夾中。

到目前爲止,我讀過的所有內容都沒有真正起作用。

我已經嘗試將我的dbOffense.mdf更改爲bin/Debug/Database目錄。然後,每當我在我的.NET應用程序中刪除並設置一個新的連接/數據源時,數據集將與我的Windows應用程序OffenseDatabase生成在同一個文件夾中,而不是與dbOffense.mdf相同的文件夾。

請問有人可以幫忙嗎?

+0

當你說「與我的Windows應用程序OffenseDatabase相同的文件夾」時,你是在談論項目文件夾嗎? – jmcilhinney

+0

@jmcilhinney是的。如果我要分享我目前的情況,我仍然在尋找解決我的問題的方法。 – NoobCoder

回答

1

您實際上沒有問題,但您正在嘗試創建一個。本地數據文件就像它們一樣工作,但有些人不知道並使他們的生活更加困難。這是它的工作原理。

您將數據文件添加到您的項目,並將其保存在項目文件夾中。像項目文件夾中的所有其他文件一樣,它是一個SOURCE文件。它不會在運行時使用。如果您想對數據庫模式或默認數據進行任何更改,請在源文件中進行更改。如果您生成一個類型化的DataSet或實體框架模型或類似的東西,那麼您可以從該文件中完成。

當您構建項目時,運行時使用的文件將被放置在輸出文件夾中。對於Debug版本,通常是項目文件夾下的「bin \ Debug」,對於版本版本,通常是'bin \ Release'。您的源數據文件將被複制並與EXE和任何其他輸出文件一起放置在該輸出文件夾中。它是在運行時連接到的那個副本,而不是源文件。其中一個明顯的優點是,當部署時,您的發佈輸出將包含源文件的乾淨副本,而不必清理您用於調試的文件。

默認情況下,數據文件的Copy To Output Directory屬性設置爲Copy Always。這意味着,每當您對代碼進行更改並重新構建時,'bin \ Debug'文件夾中的舊副本將被覆蓋。這不是很多人想要的。許多人(如果不是大多數的話)希望他們的測試數據在構建之間保持不變。在這種情況下,只需將該屬性設置爲Copy If Newer,然後只有在更改源文件時纔會創建新副本。

因此,簡而言之,您的連接將按照原樣工作,除非您已完成某些操作來打破正常的操作。 「| DataDirectory |」佔位符將在運行時解析到正確的文件夾。只要確保您的源文件已被添加到項目中,並且您可能需要做的唯一的事情就是更改Copy To Output Directory屬性。

+0

@jmcillhinney嗯嗨。我又回來了。您的建議可行,但是當編輯/更新數據庫時,它會恢復爲原始數據。這裏是場景:在我的機器上,數據庫中的一個表有五個輸入,然後當我將它傳遞給另一臺計算機時,它恢復爲只有一個數據。它只有在我不知道原因的情況下才會出現。 – NoobCoder

+0

我更改爲'Copy If Newer'是我的.mdf文件和我的.xsd文件。 – NoobCoder

+0

'Copy If Newer'表示源文件將在任何時候被複制到工作文件上,並且源文件的最後修改時間在工作文件的最後修改時間之後。一般情況下,只有在更改源文件中的模式或數據時纔會發生這種情況,在這種情況下,必須覆蓋工作文件。 IDE可能會在您打開它時設置源文件的上次修改時間。這只是你必須忍受的事情。如果有問題,請自己複製工作文件並根據需要進行恢復。 – jmcilhinney

相關問題