c# - 跨不同 Windows 机器的 MDF 数据库文件的可移植性
问题描述
这是上下文:我正在编写一个连接到本地数据库文件 (MDF) 的 C# 应用程序。该应用程序的 GUI 使用户能够执行各种查询并在 Grid View 控件中查看结果。MDF 文件与应用程序一起分发,可以被认为是不可变(或只读)资源,即不打算由最终用户更新或修改。
该应用程序目前处于 alpha 阶段,从未部署过。源代码以及 MDF 数据库是源代码控制的(通过 Perforce),因此当我团队中的其他开发人员同步他们的工作空间时,他们会获得 MDF 数据库(和 LDF 日志)的副本以及代码。不涉及服务器连接,所有查询都使用(LocalDB)\MSSQLLocalDB
默认的 Windows 身份验证对本地数据库副本进行。
这是我的问题: MDF 文件似乎不能在任何地方使用,只能在创建它的机器上使用。如果其他开发人员在他的计算机上构建我的应用程序,与本地数据库的连接将失败,并出现通用SQL Server error 5171
. 但是,MDF 文件没有损坏并且是主数据库文件,因此错误在其他地方。
这是我尝试过的:
已验证所有机器上的 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 文件并完成它吗?谢谢。
解决方案
很抱歉在最初发布后这么晚才回答我自己的问题,但这里是:解决方案是确保 MDF 文件在 Perforce 中保存为binary ,而不是text。
这立即解决了数据损坏问题,MDF 数据库最终可以跨机器/用户移植,没有任何进一步的问题。
推荐阅读
- flutter - Futter - 在 null 上调用了方法“[]”
- r - 渲染图像时出现 gganimate 错误
- java - 使用扫描仪在while循环中重复条件为真的命令
- python - 如何为 cvxpy 安装 gurobi?
- node.js - 数字海洋上的 NGINX Angular 路由
- r - 如何找到并绘制不同的可信区间?
- qt - Qtquick - 未找到 QML 模块
- c++ - 如何在 C++ 中解析逗号分隔的字符串,其中一些元素用逗号引用?
- python - 对 asyncpg 连接池使用“async with”时有关 __aexit__ 的属性错误
- vue.js - 部署 Vue.js 应用程序后下载 PDF 的问题