You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6中ADODB Recordset读取SQL Server中文显示为问号的问题排查

VB6读取SQL Server中文显示问号的解决思路

核心原因分析

中文显示为问号,本质是Unicode数据在传输/读取过程中被转成了ANSI编码,导致字符丢失。以下是针对性的解决步骤:


1. 修复数据库连接字符串,启用Unicode传输

VB6的ADODB默认可能以ANSI模式连接SQL Server,需要在连接字符串中明确启用Unicode支持。修改你的连接字符串,添加Unicode=True参数:

' 示例连接字符串(根据实际配置调整)
m_Connection.ConnectionString = "Provider=SQLOLEDB.1;Data Source=你的SQL服务器;Initial Catalog=Language;User ID=账号;Password=密码;Unicode=True"

如果使用新的SQL Server驱动(MSOLEDBSQL),同样需要加入该参数:

m_Connection.ConnectionString = "Provider=MSOLEDBSQL;Data Source=你的SQL服务器;Initial Catalog=Language;User ID=账号;Password=密码;Unicode=True"

2. 确认数据库字段为Unicode类型

检查SQL Server表tempLbls中的LblValue字段类型,必须是**nvarchar、nchar或ntext**(优先用nvarchar),不能是varchar/char(非Unicode类型存储中文会导致不可逆的字符丢失)。
如果字段类型错误,执行SQL修改:

ALTER TABLE Language.dbo.tempLbls ALTER COLUMN LblValue nvarchar(255) -- 根据实际长度调整

3. VB6中确保变量以Unicode方式接收数据

VB6的String类型本身是Unicode,但需避免不必要的编码转换。直接用Unicode方式读取字段值:

Dim TransalatedValue As String ' VB6的String默认是Unicode,无需额外声明
If Not m_rstempLbls.EOF Then
   TransalatedValue = m_rstempLbls.Fields("LblValue").Value ' 明确使用Fields读取,避免隐式转换
End If

4. 兜底方案:手动编码转换(仅当以上步骤无效时)

如果仍有问题,尝试将字段的字节数据直接转换为Unicode字符串:

Dim byteArr() As Byte
If Not m_rstempLbls.EOF Then
   byteArr = m_rstempLbls!LblValue
   TransalatedValue = StrConv(byteArr, vbUnicode)
End If

内容的提问来源于stack exchange,提问作者Disha5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:20:10