如何从 C# ASP.NET 参数将希伯来语文本发送到 SQL Server?
Posted
技术标签:
【中文标题】如何从 C# ASP.NET 参数将希伯来语文本发送到 SQL Server?【英文标题】:How can I send Hebrew text to SQL Server from a C# ASP.NET parameter? 【发布时间】:2021-12-01 04:32:01 【问题描述】:当words_array[i]
是希伯来语文本时,数据库显示'?????'
代替单词。
myCommand.CommandText = "INSERT INTO MyTable(word) VALUES (@word);
myCommand.Parameters.Add(new SqlParameter("@word", SqlDbType.Varchar, 50));
command.Parameters["@word"].Value = words_array[i];
我在下面尝试过,但出现错误:
'N' 附近的语法不正确
我的尝试:
myCommand.CommandText = "INSERT INTO MyTable(word) VALUES (N'@word'N);
我也试过这个 - 问题:用文字“@word”代替希伯来语单词。
myCommand.CommandText = "INSERT INTO MyTable(word) VALUES (N'@word');
【问题讨论】:
SqlDbType.Varchar
???该行告诉 SQL Server 将参数视为 ASCII 而不是 Unicode。请改用NVarchar
。 SQL Server 和 ASP.NET 在 Unicode 方面都没有任何问题,SO 本身就证明了这一点 - 它是一个 ASP.NET Web 应用程序,将文本存储在 SQL Server 数据库中
谢谢!解决了!
不要使用addwithvalue
旁注:如果您要批量插入,也可以使用较短的语法myCommand.Parameters.Add(new SqlParameter("@word", SqlDbType.NVarchar, 50)).Value = words_array[i];
,考虑使用表参数,或使用SqlBulkCopy
,这两种方法都更快
【参考方案1】:
将SqlDbType.VarChar
更改为SqlDbType.NVarChar
。使用参数化查询时无需为字符串添加前缀。
行:
myCommand.Parameters.Add(new SqlParameter("@word",SqlDbType.VarChar,50));
表示参数的类型是使用单字节代码页而不是 Unicode 字符串的字符串。 .NET 中的字符串是 Unicode,但这一行告诉驱动程序使用线程的 CurrentCultureInfo
指定的代码页将值转换为单字节编码。
应该是
myCommand.Parameters.Add(new SqlParameter("@word",SqlDbType.NVarChar,50));
【讨论】:
以上是关于如何从 C# ASP.NET 参数将希伯来语文本发送到 SQL Server?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期
如何将 NicEdit 富文本编辑器与 asp.net C# (.aspx) 页面集成