Excel VBA通过ADODB连接SQL拉取NVARCHAR字段值异常求助
VBA ADODB读取SQL NVARCHAR字段内容异常的解决方案
核心原因
问题源于ADODB连接与SQL Server NVARCHAR(Unicode UTF-16)类型的编码适配问题,特殊字符(如|)触发了字符串解析截断。
分步解决方法
1. 调整连接字符串的Unicode参数
移除无效的Session Mode=ANSI,添加Unicode=True强制以Unicode模式读取数据,连接字符串示例:
' SQLOLEDB驱动 Provider=SQLOLEDB;Data Source=你的服务器地址;Initial Catalog=你的数据库;User ID=账号;Password=密码;Unicode=True; ' 或更推荐的ODBC驱动17 Driver={ODBC Driver 17 for SQL Server};Server=你的服务器地址;Database=你的数据库;Uid=账号;Pwd=密码;Unicode=Yes;
2. 改用专用方法读取Unicode字段
不要直接用.Value读取字段,改用GetString(adClipString)方法,避免特殊字符解析异常:
Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open "SELECT TargetColumn FROM YourTable", conn, adOpenStatic, adLockReadOnly If Not rs.EOF Then Dim rawContent As String ' 读取完整Unicode字符串 rawContent = rs.Fields("TargetColumn").GetString(adClipString) Debug.Print rawContent ' 立即窗口验证内容是否完整 ' 写入Excel单元格 ThisWorkbook.Sheets("Sheet1").Range("A1").Value = rawContent End If
3. 检查SQL字段排序规则
确认目标NVARCHAR字段的排序规则为Unicode兼容类型(如Chinese_PRC_CI_AS、Latin1_General_CI_AS_KS_WS等),若为ANSI排序规则,需修改字段属性:
ALTER TABLE YourTable ALTER COLUMN TargetColumn NVARCHAR(255) COLLATE Chinese_PRC_CS_AS_WS;
4. 排除Excel单元格格式干扰
确保写入的Excel单元格格式为常规,避免文本格式设置导致的内容截断或显示异常。
内容的提问来源于stack exchange,提问作者Whaaa
相关产品推荐
相关产品推荐

