通过COM DLL连接Fabric数据仓库时出现Microsoft.Data.SqlClient.SqlException异常
解决方案
1. 匹配.NET Framework版本
你的COM DLL必须目标NET Framework 4.7.2或更高版本,别用.NET Core/.NET 6+。Fabric数据仓库要求这个兼容版本,而且Excel进程基于.NET Framework运行,Core版本组件在COM互操作场景下会有网络栈适配问题,直接导致连接失败。
2. 强制Excel使用TLS 1.2
Fabric数据仓库要求TLS 1.2或更高,Excel默认可能没启用。修改excel.exe.config(放在Excel安装目录,比如C:\Program Files\Microsoft Office\root\Office16,需管理员权限):
- 在
<configuration>节点下添加:<system.net> <settings> <servicePointManager securityProtocol="Tls12" /> </settings> </system.net> - 在
<runtime>节点下添加:<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false;Switch.System.Net.DontEnableSystemDefaultTlsVersions=false" />
3. 修正Fabric连接字符串
连接字符串必须包含Fabric要求的参数,示例:
"Server=tcp:<你的Fabric服务器>.datawarehouse.fabric.microsoft.com,1433;Database=<你的数据库>;Authentication=Active Directory Integrated;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
- 必须设
Encrypt=True,Fabric强制加密连接 TrustServerCertificate=False避免证书信任问题导致连接中断- 非AD认证的话,把
Authentication改成Sql Password,再加User ID和Password
4. 正确注册COM DLL
确保用和Excel位数匹配的regasm注册:
- 32位Excel:用
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe - 64位Excel:用
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe
注册时加/codebase参数,让Excel能找到DLL路径:
regasm /codebase YourComDll.dll
5. 捕获SqlClient详细日志
在COM DLL里加日志代码,排查网络细节:
System.Diagnostics.Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener("sqlclient.log")); System.Diagnostics.Trace.AutoFlush = true; Microsoft.Data.SqlClient.SqlClientFactory.SetTraceSwitchLevel(Microsoft.Data.SqlClient.SqlClientTraceSwitch.Level.Verbose);
生成的sqlclient.log会显示证书验证、代理拦截或DNS解析问题——这些都是远程主机关闭连接的常见原因。
6. 调整Excel安全设置
Excel的宏安全可能限制COM组件网络访问:
- 打开Excel → 文件 → 选项 → 信任中心 → 信任中心设置 → 宏设置,启用所有宏(测试环境用,生产环境设受信任位置)
- 如果DLL有签名,确认签名已加入Excel的“受信任的发布者”列表
内容的提问来源于stack exchange,提问作者perove
相关产品推荐
相关产品推荐

