如何从 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 中的文本框中存储日期

从动态创建的文本字段回发一个值 [ASP.net]

如何将 NicEdit 富文本编辑器与 asp.net C# (.aspx) 页面集成

ASP.NET如何获取url参数

如何将参数传递给 jQuery document.ready() 函数(ASP.NET MVC、C#)

通过 Url.Action 将参数发送到 asp.net MVC 中的控制器