以下是上下文::我正在编写一个连接到本地数据库文件(MDF)的C#应用程序。应用程序的GUI使用户可以执行各种查询并在Grid View控件中查看结果。 MDF文件随应用程序一起分发,并且可以视为不可变(或只读)资源,即不意味着最终用户会对其进行更新或修改。
该应用程序当前处于Alpha阶段,尚未部署。源代码以及MDF数据库都是受源代码控制的(通过Perforce),因此,当我们团队中的其他开发人员同步其工作空间时,他们将获得MDF数据库(和LDF日志)的副本以及代码。不涉及服务器连接,使用(LocalDB)\MSSQLLocalDB
和默认的Windows身份验证对本地数据库副本进行所有查询。
这是我的问题:MDF文件似乎不能在创建它的计算机上的任何地方使用。如果另一个开发人员在他的计算机上构建我的应用程序,则与本地数据库的连接将失败,并显示通用SQL Server error 5171
。但是,MDF文件未损坏 ,并且是 primary 数据库文件,因此错误在其他位置。
这是我尝试的方法:
已确认所有计算机上的SQL Server版本都相同,因此这不是兼容性问题
应用程序中使用的连接字符串是动态的(即适应MDF文件在计算机上的位置),其格式为:Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\MyLocation\DatabaseFile.mdf;Integrated Security=True;Connect Timeout=30
在所有计算机上使用相同的Windows登录名,但无济于事(仍然给出error 5171
)
已通过SQL Server管理服务验证的数据库选项:Restrict Access
设置为MULTI_USER
我发现的唯一解决方法是在机器上重新生成整个数据库,但这是不可接受的:一个人不能仅连接到从Perforce获得并完成的MDF文件吗?谢谢。
答案 0 :(得分:0)
很抱歉在最初发布后这么晚回答了我自己的问题,但是这里是:解决方案是确保MDF文件在Perforce中另存为 binary , not < / em>作为文本。
那立即解决了数据损坏问题,MDF数据库终于可以在机器/用户之间移植,而没有任何其他问题。