【问题标题】:Database file not copied during publishing so installed application throws exception发布期间未复制数据库文件,因此安装的应用程序引发异常
【发布时间】:2017-02-25 01:30:48
【问题描述】:

我正在开发一个 C# windows 窗体应用程序,其中包含基于服务的数据。当我测试我的应用程序时,它的数据库工作正常,但是在程序尝试打开 sqlconnection 时发布和安装程序后,出现此错误:

System.Data.SqlClient.SqlException (0x80131904):尝试附加 文件的自动命名数据库 C:\Users\Behnam\AppData\Local\Apps\2.0\Data\5XVOVXV1.3VG\M5T04ZK7.QBJ\tahl..tion_45c3791d6509222d_0001.0000_be1c7cc05811ecf0\Data\AppData\TahlilGar.mdf 失败的。存在同名数据库,或指定文件不能 被打开,或者它位于 UNC 共享上。

这是我的连接字符串:

<add name="BA" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf;
Integrated Security=True;"providerName="System.Data.SqlClient" />

我也试过:User Instance= True;,但结果是:

连接用户时不允许用户实例登录标志 SQL Server 实例。连接将被关闭。

我该如何解决这个问题?


编辑: 我检查了提到的路径,没有我的 .mdf 文件。所以我从我的项目中复制了它,之后它工作得很好。 现在为什么在预期路径中发布和安装时我的 mdf 文件没有复制。

【问题讨论】:

  • 您是否选择在要发布到的服务器上使用 LocalDB?是不同的机器吗?我认为您至少会在服务器上使用 SQL Express。 LocalDB 用于开发。
  • 我在开发程序的同一台机器上安装已发布的应用程序?我也在另一台机器上测试过,我又得到了同样的错误。
  • 此链接msdn.microsoft.com/en-us/library/kzy0fky2.aspx 包含有关包含和排除用于单击发布的文件的详细信息
  • @Kira -- 这是正确答案。请提供您的答案以赚取赏金。

标签: c# connection-string app-config sqlconnection local-database


【解决方案1】:

您的连接字符串提到 SQL Server Express 实例已在开发机器中使用:

<add name="BA" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf; Integrated Security=True;"providerName="System.Data.SqlClient" />

假设您的部署机器使用完整版本的 SQL Server 实例,从代码自动生成数据库对部署上下文没有影响,因为 User Instance 功能仅在 Express 版本中支持。

以下是解决问题的步骤:

  1. 通过删除用户实例部分修改您的连接字符串(删除User Instance=True,如果有的话)。

  2. 手动运行aspnet_regsql.exe 以在部署机器上附加和注册数据库/MDF 文件(如果您还没有这样做的话)。

  3. 如果您已将数据库迁移到部署机器中的 SQL Server 实例,请确保您应该更改数据源路径并添加初始目录(即您的数据库名称),就像这样。

    <add name="BA" connectionString="Data Source=SERVERNAME;Initial Catalog=TahlilGar;Persist Security Info=True;User ID=DBUserID;Password=DBPassword;Integrated Security=True;"providerName="System.Data.SqlClient" />
    

AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf 部分在本地计算机中存在数据库并且当前使用实例的用户帐户被授予附加 MDF 文件的适当权限时起作用。

来自Adam Tuliper的补充说明:

这可能是您运行 IIS 的帐户的问题 在无权访问该文件的情况下。

为网络服务分配对该文件夹的完全权限 帐户。

您可以暂时尝试“每个人”,看看是否能解决问题, 并从那里向后工作。

同时确保它没有被其他网络服务器使用(进程 explorer/sysinternals 可以帮助您了解这一点)。

参考资料:

Attempt to attach an auto-named database for .mdf file failed

The user instance login flag is not supported on this version of SQL Server. The connection will be closed

【讨论】:

  • 我的项目是 windows 窗体应用程序而不是 asp.net
【解决方案2】:

当使用单击一次发布 Windows 窗体应用程序时,我们可以将文件与您的项目一起包含或排除。 MSDN link解释如何添加文件

https://msdn.microsoft.com/en-us/library/kzy0fky2.aspx

注意:数据库只有添加到项目中才会出现在Application Files对话框中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多