【问题标题】:ADO.NET |DataDirectory| where is this documented?ADO.NET |数据目录|这是在哪里记录的?
【发布时间】:2009-09-11 06:48:23
【问题描述】:

在 AppConfig 中可以使用 |DataDirectory| 但我找不到任何文档?

【问题讨论】:

标签: c# ado.net datadirectory


【解决方案1】:

|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");

【讨论】:

  • 这里是一些文档(搜索 DataDirectory):msdn.microsoft.com/en-us/library/…
  • 这似乎也适用于 sqlite:sqlite.phxsoftware.com/forums/t/1824.aspx
  • 关于据称未记录的连接字符串“约定”的一个小提示是,“AttachDBFilename=|DataDirectory|”末尾不应有最后一个斜杠(与上面的示例相反) .此外,MDF 文件的名称(例如上面的 )应与“初始目录”中写入的值匹配。这可能只有在使用 SQL Express 时才需要。
【解决方案2】:

在MSDN社交论坛this可以找到答案

|数据目录| (括在管道符号中)是指示数据库路径的替换字符串。它消除了对导致几个问题的完整路径进行硬编码的需要,因为数据库的完整路径可以在不同的位置进行序列化。 DataDirectory 还使共享项目和部署应用程序变得容易。

例如,而不是具有以下连接字符串:

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

使用DataDirectory,可以有如下连接字符串:

“Data Source = |DataDirectory|\Mydb.sdf”

要设置 DataDirectory 属性,请调用 AppDomain.SetData 方法。如果不设置 DataDirectory 属性,将应用以下默认规则来访问数据库文件夹:

  • 对于放在用户计算机文件夹中的应用程序,数据库文件夹使用应用程序文件夹。
  • 对于在 ClickOnce 下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。

【讨论】:

  • 在 MVC 项目中你会在哪里调用 AppDomain.SetData?
  • 是否可以使用带有“Data Source = |DataDirectory|”之类的数据库名称的整个路径?所以DataDirectory必须定义为AppDomain.CurrentDomain.SetData("DataDirectory", "c:\program files\MyApp\Mydb.sdf");
【解决方案3】:

不正确的家伙! |数据目录|指为您的实例配置的 mssql\data 目录。

例如,我将 Visual Studio 2012 与 SQL Express 结合使用。 |数据目录|将所有 MDF 文件放在 C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA 下,我的 sql express 不是我的解决方案 app_data 文件夹。

该文件也是我的 web.config 中指定的名称 MVCMovie.Models.MovieDBContext 而不是 Movies.mdf。

我认为它需要在 Visual Studio 中的某个位置进行配置,以便将其适当地放置在 app_data 下。

【讨论】:

    【解决方案4】:

    有一个名为 SqlConnectionHelper 的内部类会解析这个并在需要时创建 MDF。

    这是我能找到的关于该类和 |DataDirectory| 的唯一 MS 文档宏:http://msdn.microsoft.com/en-us/library/aa478948.aspx.

    【讨论】:

      【解决方案5】:

      http://msdn.microsoft.com/en-us/library/aa478948.aspx

      |数据目录|连接字符串的一部分指定 MDF 文件位于 App_Data 目录中。

      【讨论】:

        【解决方案6】:

        如果您使用的是代码优先迁移,这可能是相关的。

        使用 VisualStudio 2013(至少)在运行 Update-Database 命令时,数据目录与当前在 Visual Studio 中配置的“启动项目”相对。

        即使您在另一个项目上运行更新数据库(在包管理器控制台上选择),它也会在当前选择的启动项目的 App_Data 上创建您的数据库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-23
          • 1970-01-01
          • 2020-08-20
          • 2014-04-21
          • 2018-03-27
          • 1970-01-01
          • 2011-03-05
          • 1970-01-01
          相关资源
          最近更新 更多