我正在开发一个包含基于服务的数据的C#窗体应用程序。当我测试我的应用程序时,它的数据库工作正常,但在程序尝试打开sqlconnection时发布和安装程序后,出现此错误:
System.Data.SqlClient.SqlException(0x80131904):尝试附加 一个自动命名的文件数据库 C:\ Users \用户贝赫南\应用程序数据\本地\应用\ 2.0 \数据\ 5XVOVXV1.3VG \ M5T04ZK7.QBJ \ tahl..tion_45c3791d6509222d_0001.0000_be1c7cc05811ecf0 \数据\应用程序数据\ TahlilGar.mdf 失败。存在同名的数据库,或指定的文件不能存在 打开,或者它位于UNC分享。
这是我的ConnectionString:
<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文件在预期路径中发布和安装时没有复制。
答案 0 :(得分:6)
使用单击一次发布Windows窗体应用程序时,我们可以在项目中包含或排除这些文件。 MSDN link解释了如何添加文件
https://msdn.microsoft.com/en-us/library/kzy0fky2.aspx
注意:只有将数据库添加到项目
时,数据库才会出现在应用程序文件对话框中
答案 1 :(得分: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实例,代码中的自动数据库生成对部署上下文没有影响,因为Express版本仅支持User Instance
功能。
以下是解决问题的步骤:
修改连接字符串并删除用户实例部分(如果有的话,删除User Instance=True
)。
手动运行aspnet_regsql.exe
以在部署机器上附加和注册数据库/ MDF文件(如果您还没有完成)。
如果您已将数据库迁移到部署计算机中的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的帐户的问题 无法访问该文件。
为网络服务的该文件夹分配完整权限 帐户。
您可以暂时尝试每个人&#39;并看看它是否解决了这个问题, 并从那里向后工作。
还要确保其他Web服务器不使用它(进程 explorer / sysinternals可以帮助告诉你)。
参考文献:
Attempt to attach an auto-named database for .mdf file failed