【问题标题】:AttachDBFileName is not working after deployment部署后 AttachDBFileName 不起作用
【发布时间】:2012-11-16 07:24:17
【问题描述】:

我在 app.config 中定义了连接字符串

  <connectionStrings>
    <add name="StoreConnectionString"
    connectionString="Data Source=(local);MultipleActiveResultSets=True;AttachDBFileName=C:\Users\Firdavs\Desktop\Data\StoreServer.mdf;Integrated Security=True;User Instance=True;"
    providerName="System.Data.SqlClient" />  
  </connectionStrings>

我在我的应用程序中使用 c# 和 sql express。当我在我的机器上的 Visual Studio 中运行时,它工作正常。但是在创建设置并部署到其他机器之后。我正在编辑显示 AttachDBFileName=Path 的 .exe.config 文件。应用程序给我错误。 Sql Express 安装在该机器上。我想附加不起作用。你有什么建议? 请告诉我方向!

【问题讨论】:

    标签: c# sql-server-express


    【解决方案1】:

    问题在这里:“AttachDBFileName=C:\Users\Firdavs\Desktop\Data\StoreServer.mdf;”

    当你将它部署到另一台机器上时,该绝对路径的变化很小是相同的......你需要给一个虚拟路径......

    您需要将 mdf 复制到同一目录中。然后在 Visual Studio 中确保当您选择 mdf 文件时,将“复制到输出目录”的属性更改为“如果较新则复制”(通过双击已列出的“不复制”文本来更改它那里) 然后将 AttachDbFilename 更改为 ... AttachDbFilename=|DataDirectory|StoreServer.mdf;....

    【讨论】:

    • 如何给虚拟路径?你能给我更多的例子吗?
    • 查看我上面给你的新信息
    • 什么是|DataDirectory|在 c# 应用程序中?
    【解决方案2】:

    正如我之前在此站点上所说的那样 - 整个 User Instance 和 AttachDbFileName= 方法是有缺陷的 - 充其量是! Visual Studio 将复制 .mdf 文件,很可能,您的 INSERT 工作正常 - 但您只是在查看 错误的 .mdf 文件结束!

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

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

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

    2. 安装 SQL Server Management Studio Express

    3. SSMS Express中创建你的数据库,给它一个逻辑名称(例如StoreServer

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

      Data Source=(local);Database=StoreServer;Integrated Security=True
      

      其他一切都一模一样和以前一样......

    当您部署到客户的 PC 时 - 执行相同的步骤:安装 SQL Server Express,在服务器上创建数据库,使用 server=(local)(或 server=machinename方法) - 并完成它!

    【讨论】:

    • 感谢 marc_s 的回答。但我不想在我的客户端机器上安装 sql server management studio。我只想用一个包让我的应用程序易于安装。我只想让我的客户设置应用程序并开始工作。因为我的安装项目允许在未安装的情况下设置 sql express。但是在附加 DBFileName 时,我遇到了这个问题。如果我安装 SQL Server Management Studio,他们可以看到我的数据库结构。这不好。
    • @FirdavsKurbonov:如果您愿意,您可以在不使用 Mgmt Studio 的情况下完成所有这些操作 - 只需在命令行中使用 sqlcmd
    • 有没有其他方法可以自动完成?
    • @FirdavsKurbonov:您可以使用 SMO(SQL Server 管理对象)库在 C# 中编写所有内容
    • 任何示例或任何链接都将不胜感激。谢谢。
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2022-01-17
    • 2017-04-09
    • 2018-12-20
    • 2021-04-30
    • 2014-07-13
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多