2008-09-24 37 views
14

是否可以在連接字符串中指定相對路徑引用,在web.config中指定attachDbFileName屬性?例如,在我的數據庫位於App_data文件夾中,我可以輕鬆地指定AttachDBFilename爲| DataDirectory | \ mydb.mdf和| Datadirectory |會自動解析到正確的路徑。WebConfig.ConnectionString中的相對路徑引用

現在,假設web.config文件位於A文件夾中,但數據庫位於B \ App_data文件夾中,其中A和B文件夾位於同一文件夾中。無論如何要使用相對路徑引用來解析正確的路徑嗎?

回答

10

這取決於你的'| DataDirectory |'位於。如果「| DataDirectory |」的解析值位於文件夾A(web.config所在的位置)中,則no - 您不能指定不是「| DataDirectory |」解析值的子文件夾的相對路徑。

可以做的是設置'| DataDirectory |'的值通過調用AppDomain.SetData方法,將它放在任何你想要的位置。

從MSDN在線文檔:

當使用DataDirectory目錄,生成的文件路徑不能在目錄結構中高於由目錄替換字符串指向。例如,如果完全展開的DataDirectory是C:\ AppDirectory \ app_data,那麼上面顯示的示例連接字符串將工作,因爲它位於c:\ AppDirectory下方。但是,試圖將DataDirectory指定爲| DataDirectory | .. \ data將導致錯誤,因爲\ data不是\ AppDirectory的子目錄。

希望這會有所幫助。

0

在IIS中,您還可以創建一個虛擬目錄,指向保存真實數據庫的任何位置。然後你的連接字符串只是引用虛擬目錄。

15

我遇到了與以下情況相同的問題:我想使用與我的集成測試中的應用程序相同的數據庫。

我去了以下解決方法:

在我的測試項目的App.config中我有:

<appSettings> 
    <add key="DataDirectory" value="..\..\..\BookShop\App_Data\"/> 
</appSettings> 

在測試設置我執行下面的代碼:

var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"]; 
    var absoluteDataDirectory = Path.GetFullPath(dataDirectory); 
    AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory); 
+0

非常感謝你!非常珍惜我! – 2017-04-15 23:02:03

1

將以下屬性添加到測試方法中:

[DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")] 
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)] 

變量|DataDirctory|在運行測試時由系統定義。 DeploymentItem將電子表格複製到那裏。您指向電子表格和電子表格中數據來自的標籤。右鍵單擊該選項卡將其重命名爲易於記憶的內容。