2009-09-11 117 views

回答

71

|DataDirectory|是一個替換字符串,因此您可以分別配置數據庫文件的位置。

所以不是:

SqlConnection c = new SqlConnection (
    @"Data Source=.\SQLDB; AttachDbFilename=C:\MyDB\Database.mdf;Initial Catalog=Master"); 

你做到以下幾點:

// Set |DataDirectory| value 
AppDomain.CurrentDomain.SetData("DataDirectory", "C:\myDB"); 

// SQL Connection String with |DataDirectory| substitution string 
SqlConnection c = new SqlConnection (
    @"Data Source=.\SQLDB; AttachDbFilename=|DataDirectory|\Database.mdf;Initial Catalog=Master"); 
+2

這是一些文檔(搜索DataDirectory):http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx – ironic 2012-04-02 17:09:21

+2

以及更多:http://msdn.microsoft.com /en-us/library/cc716756.aspx – ironic 2012-04-02 17:11:57

+0

這似乎也適用於sqlite:http://sqlite.phxsoftware.com/forums/t/1824.aspx – juFo 2013-01-21 09:28:25

14

在MSDN社會論壇this答案可以發現

| DataDirectory目錄| (包含在管道符號中)是一個替代字符串,用於指示數據庫的路徑。它消除了對導致幾個問題的完整路徑進行硬編碼的需要,因爲數據庫的完整路徑可以在不同的地方被序列化。 DataDirectory還可以輕鬆共享項目並部署應用程序。

例如,而不是具有下面的連接字符串:

"Data Source= c:\program files\MyApp\Mydb.sdf" 

使用DataDirectory目錄,你可以有下面的連接字符串:

「Data Source = |DataDirectory|\Mydb.sdf」 

要設置DataDirectory屬性,調用的AppDomain。 SetData方法。如果您沒有設置DataDirectory屬性,下面的默認規則將應用於訪問數據庫文件夾:

  • 對於被放在一個文件夾在用戶的計算機上的應用程序,數據庫文件夾使用應用程序文件夾。
  • 對於在ClickOnce下運行的應用程序,數據庫文件夾使用創建的特定數據文件夾。
+0

你會在MVC項目中調用AppDomain.SetData? – alex 2015-08-05 14:18:51

8

不正確的傢伙! | DataDirectory |指的是您的實例爲其配置的mssql \ data目錄。

因此,例如,我正在使用Visual Studio 2012與SQL Express不兼容。 | DataDirectory目錄|將所有MDF文件放在C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA下安裝我的sql express,而不是解決方案app_data文件夾。

此文件名稱MVCMovie.Models.MovieDBContext不是Movies.mdf在我的web.config中指定。

我想它需要在visual studio中的某個地方進行配置,以便將其正確放置在app_data下。

3

如果您使用代碼優先遷移,這可能是相關的。

使用VisualStudio 2013(至少)運行Update-Database命令時,數據目錄與當前在Visual Studio中配置的「啓動項目」相對。

即使您在另一個項目上運行更新數據庫(在包管理器控制檯上選擇該項目),它也會在當前選定的啓動項目的App_Data上創建數據庫。