2009-09-11 69 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上创建数据库。