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