如何通过C# ASP.NET参数向SQL Server插入希伯来文本避免乱码
问题根因
- 原有代码使用
SqlDbType.Varchar作为参数类型,该类型为单字节编码,不支持希伯来语等Unicode字符,是导致存储后显示为?????的核心原因 - 两次修改SQL的写法不符合参数化查询规则:
N'@word'会将@word识别为字符串常量而非参数,N'@word'N属于SQL语法错误
正确修改方案
- 首先确认数据库
MyTable表的word字段类型为NVarchar/NChar等Unicode存储类型,若字段本身为Varchar需要先修改字段类型 - 修改代码中的参数类型为
SqlDbType.NVarChar,SQL语句无需额外加N前缀,修正后的代码如下:
myCommand.CommandText = "INSERT INTO MyTable(word) VALUES (@word);"; // 将参数类型从Varchar修改为NVarChar myCommand.Parameters.Add(new SqlParameter("@word", SqlDbType.NVarChar, 50)); // 注意原有代码变量名不统一,前面定义的是myCommand,不要误写为command myCommand.Parameters["@word"].Value = words_array[i];
额外说明
参数化查询场景下,只要参数指定了NVarChar类型,SQL Server会自动处理Unicode编码,不需要在SQL语句中手动加N前缀。手动给参数加单引号会导致参数失效,被识别为普通字符串。
内容的提问来源于stack exchange,提问作者user17135324
相关产品推荐
相关产品推荐

