使用SSMA导入Access数据库时出现DLL初始化错误
Access数据库导入SQL Server时SSMA连接Access报错(CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} 初始化失败)
错误现象
在使用SSMA(SQL Server Migration Assistant)连接Access数据库时触发以下错误:
Access Object Collector error: Database
Retrieving the COM class factory for component with CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} failed due to the following error: 8007045a A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A).
An error occurred while loading database content.
完整日志
[Mandatory: Generic] [16268/4] [2022-09-29 21:06:40]: SQL Server Migration Assistant for Access v9.1.22233.1001 [Mandatory: Generic] [16268/4] [2022-09-29 21:06:40]: Starting assembly: SSMAforAccess, Version=9.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Created: 08/21/2022 14:03:24 Last Modified: 08/21/2022 14:03:24 OS Version: Microsoft Windows NT 10.0.19044.0 OS architecture: x64 Processor architecture: AMD64 Current culture: en-US UI culture: en-US [Error: Collector] [16268/20] [2022-09-29 21:06:59]: Access Object Collector: An error occurred while loading database content. [Error: Collector] [16268/20] [2022-09-29 21:06:59]: Exception: Retrieving the COM class factory for component with CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} failed due to the following error: 8007045a A dynamic link library (DLL) initialization routine failed. (Exception from HRESULT: 0x8007045A). site: System.MarshalByRefObject AllocateUninitializedObject(System.RuntimeType) source: mscorlib at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType) at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType) at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj) at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Activator.CreateInstance(Type type) at Microsoft.SSMA.Framework.Access.DaoUtils.DaoUtilities.ConnectToDatabaseImpl(String fileName, Boolean readOnly, String password, Nullable`1 workgroupPolicySettings) at Microsoft.SSMA.Framework.Access.DaoUtils.DaoUtilities.TryConnectToDatabase(String fileName, Boolean readOnly, String& password, PasswordAsker passwordAsker, Nullable`1& workgroupPolicySettings, WorkgroupPolicyAsker workgroupPolicyAsker) at Microsoft.SSMA.Framework.Access.Generic.AccessConnectionUtilities.ConnectToMdbFile(XNode xMdbFile, Boolean readOnly, IUIAskPasswordProvider askPasswordProvider, IUIWorkgroupPolicyProvider workgroupPolicyProvider) at Microsoft.SSMA.Framework.Access.Collector.Loaders.MDBFileLoader.LoadChildren(XNode xNode)
环境信息
- Office 365:64位
- SSMA for Access:9.1版本,64位(路径
C:\Program Files\Microsoft SQL Server Migration Assistant for Access\bin\SSMAforAccess.exe) - SQL Server 2019 Developer Edition:64位
- 此前曾成功通过SSMA完成导入,近期更换过Office 365注册账号并更新了SSMA版本
已尝试的操作
- 修复Office安装
- 卸载并重装SSMA
- 重启电脑
- 注册表搜索CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419},确认对应DAO.DBEngine.120,但多个WOW6432Node下的相关注册表项无值,且无直接关联的DLL引用
解决建议
1. 重新注册DAO组件
打开管理员权限的命令提示符,执行以下命令(对应64位Office,若路径不符需先找到Office安装目录下的dao360.dll实际位置):
regsvr32 "C:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\DAO\dao360.dll"
2. 检查Office Click-to-Run与SSMA兼容性
- 打开任意Office应用(如Excel),进入文件>账户>更新选项>立即更新,确保Office为最新版本
- 尝试使用之前成功导入时的SSMA旧版本,新版本可能与Click-to-Run环境存在适配问题
3. 修复DAO注册表项
- 在注册表中找到
HKEY_CLASSES_ROOT\CLSID\{CD7791B9-43FD-42C5-AE42-8DD2811F0419}(非WOW6432Node路径),确认默认值为DAO.DBEngine.120 - 检查该CLSID下的
InprocServer32子项,确保默认值指向正确的64位dao360.dll路径 - 若路径缺失或错误,手动修改为实际DLL路径
4. 替代迁移方案
若以上方法无效,可绕过SSMA直接迁移:
- 使用Access自带的外部数据>SQL Server导出功能,直接将数据导入SQL Server
- 使用SQL Server的导入和导出向导,选择Access数据源完成迁移
内容的提问来源于stack exchange,提问作者Katerine459
相关产品推荐
相关产品推荐

