VBA上传中文至SQL Server显示乱码(????)的解决问询
解决Excel VBA上传中文到SQL Server显示为????的问题
这个问题我之前帮不少人解决过,核心就是字符编码不匹配导致的乱码,咱们一步步来搞定:
1. 确认SQL Server字段类型
首先要保证你存储中文的数据库字段用的是Unicode类型:
- 把字段类型从
varchar/char改成nvarchar/nchar(如果还没改的话)。因为varchar是ANSI编码,只能支持有限的字符集,中文存进去就会变成问号。
2. 修改VBA参数类型
你现在用的adVarChar是ADO的ANSI字符参数类型,和SQL Server的nvarchar不兼容,必须换成Unicode对应的参数类型adVarWChar:
原来的代码:
Parameters.Append .CreateParameter(, adVarChar, adParamInput, 255, CStr(ProjectList(i, 7)))
修改后:
Parameters.Append .CreateParameter(, adVarWChar, adParamInput, 255, ProjectList(i, 7))
注意:这里可以去掉
CStr(),因为VBA里的数组元素如果是文本,本身就是Unicode字符串,直接传递更稳妥。
3. 确保连接字符串开启Unicode支持
在你的ADO连接字符串里加上Unicode=True,强制连接使用Unicode编码传输数据,避免中途编码转换丢失信息:
Dim conn As New ADODB.Connection conn.ConnectionString = "Provider=SQLOLEDB;Data Source=你的服务器地址;Initial Catalog=你的数据库名;User ID=账号;Password=密码;Unicode=True;" conn.Open
做完这三步,中文应该就能正常上传到SQL Server了,不会再显示成问号啦。
内容的提问来源于stack exchange,提问作者Sphinx
相关产品推荐
相关产品推荐

