发布期间未复制数据库文件,因此安装的应用程序抛出异常
Database file not copied during publishing so installed application throws exception
我正在开发一个包含基于服务的数据的 C# windows 表单应用程序。当我测试我的应用程序时,它的数据库工作正常但是在程序尝试打开 sqlconnection 时发布和安装程序后,出现此错误:
System.Data.SqlClient.SqlException (0x80131904): An attempt to attach
an auto-named database for file
C:\Users\Behnam\AppData\Local\Apps.0\DataXVOVXV1.3VG\M5T04ZK7.QBJ\tahl..tion_45c3791d6509222d_0001.0000_be1c7cc05811ecf0\Data\AppData\TahlilGar.mdf
failed. A database with the same name exists, or specified file cannot
be opened, or it is located on UNC share.
这是我的连接字符串:
<add name="BA" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf;
Integrated Security=True;"providerName="System.Data.SqlClient" />
我也试过:User Instance= True;
但结果是:
The user instance login flag is not allowed when connecting to a user
instance of SQL Server. The connection will be closed.
我该如何解决这个问题?
编辑:
我检查了提到的路径,但没有我的 .mdf 文件。所以我从我的项目中复制了它,之后它运行良好。
现在为什么我的 mdf 文件在预期路径中发布和安装时没有复制。
您的连接字符串提到 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 服务器实例的完整版本,从代码自动生成数据库对部署上下文没有影响,因为 User Instance
功能仅在 Express 版本中受支持。
解决问题的步骤如下:
修改连接字符串,删除用户实例部分(如果有,请删除 User Instance=True
)。
运行 aspnet_regsql.exe
手动在部署计算机上附加和注册 database/MDF 文件(如果您尚未完成)。
如果您已将数据库迁移到部署计算机中的 SQL 服务器实例,请确保您应该像这样更改数据源路径并添加初始目录(即您的数据库名称)一.
<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" />
当本地计算机中存在数据库并且当前使用该实例的用户帐户被授予附加 MDF 文件的适当权限时,AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf
部分起作用。
来自 Adam Tuliper 的补充说明:
This is potentially an issue with the account you are running IIS
under not having access to that file.
Assign full permissions to that folder for the Network Service
account.
You can temporarily try 'everyone' and see if it resolves the issue,
and work backwards from there.
Also ensure its not in use by the other web server (process
explorer/sysinternals can help show you that).
参考文献:
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 表单应用程序时,我们可以将文件与您的项目一起包含或排除。 MSDN link 说明如何添加文件
https://msdn.microsoft.com/en-us/library/kzy0fky2.aspx
Note: Database will appear in Application Files dialog box only if it is added to project
我正在开发一个包含基于服务的数据的 C# windows 表单应用程序。当我测试我的应用程序时,它的数据库工作正常但是在程序尝试打开 sqlconnection 时发布和安装程序后,出现此错误:
System.Data.SqlClient.SqlException (0x80131904): An attempt to attach an auto-named database for file C:\Users\Behnam\AppData\Local\Apps.0\DataXVOVXV1.3VG\M5T04ZK7.QBJ\tahl..tion_45c3791d6509222d_0001.0000_be1c7cc05811ecf0\Data\AppData\TahlilGar.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
这是我的连接字符串:
<add name="BA" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf;
Integrated Security=True;"providerName="System.Data.SqlClient" />
我也试过:User Instance= True;
但结果是:
The user instance login flag is not allowed when connecting to a user instance of SQL Server. The connection will be closed.
我该如何解决这个问题?
编辑: 我检查了提到的路径,但没有我的 .mdf 文件。所以我从我的项目中复制了它,之后它运行良好。 现在为什么我的 mdf 文件在预期路径中发布和安装时没有复制。
您的连接字符串提到 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 服务器实例的完整版本,从代码自动生成数据库对部署上下文没有影响,因为 User Instance
功能仅在 Express 版本中受支持。
解决问题的步骤如下:
修改连接字符串,删除用户实例部分(如果有,请删除
User Instance=True
)。运行
aspnet_regsql.exe
手动在部署计算机上附加和注册 database/MDF 文件(如果您尚未完成)。如果您已将数据库迁移到部署计算机中的 SQL 服务器实例,请确保您应该像这样更改数据源路径并添加初始目录(即您的数据库名称)一.
<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" />
当本地计算机中存在数据库并且当前使用该实例的用户帐户被授予附加 MDF 文件的适当权限时,AttachDbFilename=|DataDirectory|\AppData\TahlilGar.mdf
部分起作用。
来自 Adam Tuliper 的补充说明:
This is potentially an issue with the account you are running IIS under not having access to that file.
Assign full permissions to that folder for the Network Service account.
You can temporarily try 'everyone' and see if it resolves the issue, and work backwards from there.
Also ensure its not in use by the other web server (process explorer/sysinternals can help show you that).
参考文献:
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 表单应用程序时,我们可以将文件与您的项目一起包含或排除。 MSDN link 说明如何添加文件
https://msdn.microsoft.com/en-us/library/kzy0fky2.aspx
Note: Database will appear in Application Files dialog box only if it is added to project