【问题标题】:C# Visual Studio: |DataDirectory| keyword in connection string conflicts mdf filesC# Visual Studio:|数据目录|连接字符串中的关键字与 mdf 文件冲突
【发布时间】:2016-08-26 17:44:30
【问题描述】:

与 2 名开发人员一起开发一个 Windows 窗体应用程序项目。通过 tfs 共享源代码,由于每台 PC 的数据目录不同,所以将数据目录路径替换为 |DataDirectory| 关键字。 (C:\Users\username\Documents\Visual Studio 20XX\Projects\solution folder\solution folder)

在连接字符串中使用了这个相对路径

class ConnectionManager
{
        public static SqlConnection dbcon()
        {
            string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\systemdb.mdf;Integrated Security=True";
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            return con;
        }
}

问题是当C#应用程序向SQL Server数据库发送数据时,它显示数据已经添加到数据库中,但实际上数据库并没有更新。

发现连接字符串与位于根文件夹中的.mdf 文件与位于bin\debug 中的.mdf 冲突。 SELECT 查询在使用 |DataDirectory| 时工作正常。 INSERT 查询在使用|DataDirectory| 时不起作用,但在使用实际目录路径而不是|DataDirectory| 时工作正常。

如何解决这个问题?要求是:

  1. 应该不需要每次从 tfs 获取最新版本后都修改目录路径,需要像 |DataDirectory| 这样的东西一直保持。

  2. 连接字符串不应与根文件夹中的.mdf 文件和bin\debug 文件夹中的文件冲突。

【问题讨论】:

    标签: c# sql-server visual-studio tfs datadirectory


    【解决方案1】:

    整个 AttachDbFileName= 方法存在缺陷 - 充其量!在 Visual Studio 中运行您的应用程序时,它将复制 .mdf 文件(从您的 App_Data 目录到输出目录 - 通常是 .\bin\debug - 您的应用程序运行的位置)并且很可能 ,您的 INSERT 工作正常 - 但您最终只是查看了错误的 .mdf 文件

    如果您想坚持使用这种方法,请尝试在 myConnection.Close() 调用上设置断点 - 然后使用 SQL Server Mgmt Studio Express 检查 .mdf 文件 - 我几乎可以确定您的数据在那里。

    在我看来,真正的解决方案

    1. 安装 SQL Server Express(反正你已经完成了)

    2. 安装 SQL Server Management Studio Express

    3. SSMS Express 中创建您的数据库,为其指定一个逻辑名称(例如 systemdb

    4. 使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

      Data Source=.\\SQLEXPRESS;Database=systemdb;Integrated Security=True
      

      其他一切都完全和以前一样......

    有关更多背景信息,另请参阅 Aaron Bertrand 的优秀博文 Bad habits to kick: using AttachDbFileName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多