升级Teradata ODBC驱动后VB.NET连接失败,VBA可正常连接求助
升级Teradata ODBC驱动后VB.NET连接失败(VBA可正常连接)
问题现象
- 升级Teradata ODBC驱动后,Excel VBA通过DSN或直接拼接连接字符串均可正常连接Teradata,确认ODBC连接本身无问题
- VB.NET使用相同连接字符串连接时,报错:
ERROR [08001] [Teradata][socket error] (439) WSA E HostUnreach: The Teradata server can't currently be reached over this network - 尝试多种连接字符串变体无效,改用Teradata.NET后出现
System.Net.Dns.GetAddrInfo中的Socket异常 - ping服务器名称可正常连通
解决方法
1. 匹配项目平台与驱动位数
Teradata ODBC驱动分32/64位,VBA默认使用32位(Office默认32位),如果VB.NET项目编译位数和驱动不匹配会导致连接失败:
- 右键VB.NET项目 → 属性 → 生成 → 平台目标,改为和ODBC驱动对应的位数(比如32位)
2. 显式指定驱动与连接参数
在VB.NET连接字符串里明确指定驱动名称,避免自动选择错误版本:
' ODBC连接示例 Dim connStr As String = "Driver={Teradata};DBCName=你的服务器名;Uid=用户名;Pwd=密码;Encryption=Yes;"
使用Teradata.NET时,显式指定端口与超时参数:
' Teradata.NET连接示例 Dim connStr As String = "Data Source=你的服务器名;User ID=用户名;Password=密码;Port=1025;Connection Timeout=30;"
3. 替换服务器名为IP地址
虽然ping服务器名正常,但VB.NET的DNS解析逻辑可能和系统ping不同,尝试用IP地址替代服务器名测试:
' ODBC方式 Dim connStr As String = "Driver={Teradata};DBCName=服务器IP;Uid=用户名;Pwd=密码;" ' Teradata.NET方式 Dim connStr As String = "Data Source=服务器IP;User ID=用户名;Password=密码;"
4. 检查程序网络权限
确认VB.NET程序进程有访问Teradata默认端口(1025)的权限,部分防火墙会拦截特定程序的网络请求(ping用的ICMP协议不受此限制):
- 临时关闭防火墙测试,或在防火墙上添加VB.NET程序的允许访问规则
5. 重装Teradata.NET驱动
若使用Teradata.NET出现DNS异常,卸载当前驱动后重新下载与ODBC驱动同版本的Teradata.NET安装包,确保驱动与项目使用的.NET框架版本兼容
内容的提问来源于stack exchange,提问作者bills
相关产品推荐
相关产品推荐

