能否在没有SQL Server的情况下访问.mdf数据库?

21

我通过SQL Server创建了一个.mdf文件,并将其放到本地文件中。我在没有安装SQL Server的计算机上运行我的程序。同时,我使用了来自System.Data.SqlClient命名空间的类(即SqlConnection..)

我想要与由SQL Server创建的.mdf文件建立某种访问连接。这是可能的吗?

3个回答

24

我认为没有绕过SQL Server引擎来交互MDF文件的可能性。您最有可能安装SQL Server Express(如果您选择通过Visual Studio的添加/删除程序进行操作,则应该是一个选项;或者您可以从这里单独下载 - 这是带有工具的2008 R2选项),附加您的数据库,然后从程序连接到该引擎。

许多在线教程会建议您使用User Instances功能和AttachDbFileName。我建议您不要走这条路,因为它经常导致混淆 - 许多用户通过Management Studio连接到一个实例的数据库,程序连接到另一个实例,并且不理解为什么一个实例更改不会在另一个实例中看到更新。 User Instances功能已废弃,我强烈建议将数据库正确地附加到实例上。

在SQL Server 2012中,您可以下载新的SqlLocalDb运行时(您需要从此处获取x86或x64 SqlLocalDB.MSI文件),这使得这个过程变得更容易,因为它是一个无需维护的按需SQL Server引擎。但是请注意,您的数据库将升级到新的11.0文件格式,这意味着您将无法将其卸载/附加或备份/还原到旧版本(2008、2008 R2等)。我添加了许多针对刚开始使用SqlLocalDb的新用户的故障排除技巧


实际上,您是在说要安装https://www.microsoft.com/en-us/download/details.aspx?id=23650,它带有管理工具且大小为240MB。是否有可用的解决方案,使我们不安装管理工具,而只在部署时安装其服务或实例,以便简化大小? - nouman arshad

8
您可以尝试使用开源项目 OrcaMDF 来解决问题。
什么是 OrcaMDF?

它是一个 C# 解析 MDF 文件的工具,可以读取 MDF 文件中的表、元数据和索引等信息,无需将其附加到正在运行的 SQL Server 实例上。

(以上描述摘自该项目页面) 作者的博客

3

1
请注意,仅当您的数据库不使用紧凑版不支持的任何功能或语法时,转换为紧凑版才有效。选择推荐Express(也是免费的)是否更安全?它虽然不太“嵌入”,但高度不太可能出现问题。 - Aaron Bertrand
使用Express,您不应该需要使用sqloledb。我对Compact Edition的了解不够深入,无法确定交互方式的确切差异,但我知道文件格式和功能集有很大不同。 - Aaron Bertrand
如果SQL Express适用于OP,则可以使用它。使用SQL Express,您可以以相同的方式连接。对于SQL CE(SqlCeConnection),您将需要使用新的连接类。 - tzerb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接