SSIS迁移至2014时,SSDT访问Access(.accdb)数据库崩溃求助
我仔细梳理了你遇到的问题——在将SSIS包从2008版本迁移至2014版本时,只要在数据流任务中连接MS-Access的*.accdb文件,不同VS/SSDT环境下都会触发Visual Studio崩溃,以下是对你的问题细节整理及后续排查建议:
崩溃场景汇总
环境1:Windows10 + VS2015专业版 + SSDT2015
在连接管理器中添加*.accdb文件并确认后,系统验证OLEDB连接的瞬间,VS直接崩溃。
环境2:Windows10 + VS2010(shell) + SQL Server 2012 BI SP4
- 重新打开项目即崩溃:因为包加载后进入设计模式,连接管理器会自动重新验证连接;
- 关闭设计时验证也无效:运行阶段依然会崩溃;
- 使用的连接字符串:
"Data Source=C:\Users\abc.accdb;Provider=Microsoft.ACE.OLEDB.12.0;"
事件日志关键错误信息
每次崩溃都会出现两类固定模式的错误:
1. 模块崩溃信息
Faulting application name: devenv.exe, version: 14.0.25420.1, time stamp: 0x57685d85
Faulting module name: mso40uiwin32client.dll, version: 16.0.4666.1000, time stamp: 0x5a8363efException code: 0xc0000005 Fault offset: 0x0014a102 Faulting process id: 0x3730 Faulting application start time: 0x01d3e8600acedd50 Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe Faulting module path: C:\Program Files (x86)\Common Files\Microsoft Shared\Office16\mso40uiwin32client.dll Report Id: c54747c6-db07-4897-82aa-02ae596645b1 Faulting package full name: Faulting package-relative application ID:
2. AccessViolation异常(堆栈可变)
Application: devenv.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.Exception Info: System.AccessViolationException at Microsoft.SqlServer.Dts.Pipeline.Wrapper.CManagedComponentWrapperClass.AcquireConnections(System.Object) at Microsoft.DataTransformationServices.Design.PipelineUtils.AcquireConnections(Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100, Microsoft.SqlServer.Dts.Runtime.Connections, Boolean) at Microsoft.DataTransformationServices.Design.DtsComponentDesigner+<>c__DisplayClass3.<ValidateComponentInternal>b__0() at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr, System.Object[], System.Object, System.Object[] ByRef) at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessageSink) at System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(System.Object) at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
已尝试但无效的操作
你已经试过不少常规方案,但都没解决问题:
- 以管理员身份运行SSDT
- 修改注册表中
shownfirstrunoptin属性 - 重新安装VS2015、SSDT2015及SQL Server 2012 BI SP4
- 切换
Target Server Version为2012/14/16 - 调整
Run64BitRunTime为true/false - 尝试ACE OLEDB 12.0和16.0两个版本的提供程序
- 测试*.mdb格式的包运行正常
后续排查建议
结合错误日志里的mso40uiwin32client.dll(Office 2016组件)和AccessViolation异常,这里给你几个针对性的排查方向:
Office组件版本冲突
错误指向Office 2016的共享组件,而你使用的ACE OLEDB提供程序可能和Office版本存在32/64位不匹配。建议:- 确认系统安装的ACE OLEDB提供程序是32位还是64位,VS是32位程序(默认 devenv.exe 是x86),所以必须使用32位的ACE OLEDB驱动;
- 卸载所有Office版本,先安装对应版本的ACE驱动(比如Access Database Engine 2010 Redistributable 32位),再重新安装需要的Office组件,避免版本冲突。
禁用VS的Office集成组件
尝试在VS中禁用可能和Office交互的插件:- 打开VS,进入
工具→扩展和更新,禁用所有Office相关的扩展; - 以安全模式启动VS(运行
devenv.exe /SafeMode),再尝试连接*.accdb,看是否还会崩溃。
- 打开VS,进入
修改连接字符串的额外参数
在连接字符串中添加Persist Security Info=False;或Mode=ReadWrite;,避免某些权限或模式触发的冲突:Data Source=C:\Users\abc.accdb;Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;手动编辑SSIS包的XML配置
绕过VS的连接验证,直接手动修改包的XML文件:- 将SSIS包另存为XML格式(.dtsx);
- 找到连接管理器的配置节点,手动写入正确的连接字符串;
- 重新加载包,避免设计时的自动验证。
内容的提问来源于stack exchange,提问作者San

