如何在Delphi 10.2中通过ADO连接SQL Server Compact Edition 4.0的.sdf数据库文件?
解决Delphi 10.2连接SQL Server Compact 4.0 (.sdf)的ADO问题
我之前也碰到过类似的坑,核心问题其实是32位/64位驱动和Delphi程序的位数不匹配,再加上手动修改注册表的操作没到位。下面给你一步步梳理解决方案:
1. 先搞定驱动位数的问题
你只装了64位的SQL CE 4.0驱动,但Delphi 10.2默认是32位IDE,编译出来的程序也是32位的——32位程序必须用32位的OLE DB驱动才能识别到。LinqPad能打开是因为它大概率运行在64位模式下,刚好匹配你装的64位驱动,但Delphi的32位环境找不到对应的驱动。
赶紧下载SQL Server Compact 4.0 SP1的32位安装包(一定要找带SP1的版本,兼容性比原版好很多)。安装完成后,32位的OLE DB驱动会自动注册到正确的注册表位置,不需要你手动去改WOW6432Node下的项了。
2. 正确配置ADO连接
安装好32位驱动后,你有两种方式配置ADO连接:
- 方式一:直接用连接字符串
跳过提供程序列表选择,直接在ADOConnection的ConnectionString属性里粘贴这段字符串(替换成你的.sdf文件路径):Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source=C:\YourFolder\YourDatabase.sdf;Persist Security Info=False; - 方式二:用连接字符串构建器
打开ADOConnection的连接字符串编辑器,应该能看到Microsoft SQL Server Compact OLE DB Provider 4.0选项,选中后填写.sdf文件路径即可。
3. 手动验证驱动注册(如果还是看不到驱动)
如果安装后还是找不到驱动,打开注册表编辑器检查以下项:
- 定位到
HKEY_CLASSES_ROOT\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97} - 确认
ProgID键的值是Microsoft.SQLSERVER.CE.OLEDB.4.0 - 确认
InprocServer32的默认值指向32位驱动的DLL:C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\SSCEOLEDB40.dll
4. 更稳定的替代方案:用FireDAC
其实Delphi自带的FireDAC组件已经原生支持SQL Server Compact,比ADO更省心,不需要依赖OLE DB驱动的注册问题。步骤很简单:
- 拖一个
FDConnection组件到窗体 - 点击组件的
ConnectionDefs属性,新建一个连接,驱动选择MS SQL Server Compact - 在参数里设置
Database为你的.sdf文件路径 - 点击“测试连接”,成功后就能正常用FireDAC的查询组件操作数据库了
常见错误排查
- 如果还是提示“Provider is no longer available”:确认你装的是32位驱动,且Delphi程序的编译目标是32位(默认就是);如果要编译64位程序,必须同时装64位驱动。
- 如果提示数据库版本不匹配:用SQL Server Compact Toolbox工具打开你的.sdf文件,确认它确实是SQL CE 4.0版本,不是3.5的。
内容的提问来源于stack exchange,提问作者Kenan Bradic
相关产品推荐
相关产品推荐

