Unicode SQL 查询 W/ 参数而不是 N 前缀

Posted

技术标签:

【中文标题】Unicode SQL 查询 W/ 参数而不是 N 前缀【英文标题】:Unicode SQL Query W/ Parameter instead N Prefix 【发布时间】:2011-11-24 18:58:20 【问题描述】:

我有一个插入查询要在 C# 中针对 SQL Server 数据库执行。

我要插入的列是 nvarchar 类型。

我插入该列的数据不是英文的。

我使用 AddWithValue 将非英语数据传递到服务器就足够了吗?像这个例子:

string dogName = "עברית";
using (SqlConnection connection = new SqlConnection(connectionString))

    connection.Open();
    using (SqlCommand command = new SqlCommand("INSERT INTO Dogs1(Name) VALUES @Name", connection))
    
    command.Parameters.AddWithValue("Name", dogName);
    command.ExecuteNonQuery();
    

或者我必须使用 N 前缀来声明它是 unicode 吗?就像它说的那样here。

【问题讨论】:

【参考方案1】:

如果我对问题的理解正确,您可以将 SqlCommand 参数显式设置为特定数据类型。您可以将其设置为 nvarchar,如以下链接所示:http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx

下面这段代码 sn-p 直接取自 MSDN:

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@CategoryName";
parameter.SqlDbType = SqlDbType.NVarChar;
parameter.Direction = ParameterDirection.Input;
parameter.Value = categoryName;

这使用了一个显式创建的SqlParameter实例,但是通过索引SqlCommand实例的SqlParameterCollection也是同样的思路。

【讨论】:

很高兴知道,但我必须为每个参数都麻烦吗?所有这些额外的工作都会降低代码的可读性,如果可以的话,我真的很想不用它。【参考方案2】:

我相信底部的链接实际上只是在谈论SQL 本身中的值

据我所知,您获得的代码应该绝对没问题 - 否则将无法指定 Unicode 文本。

当然,这可能值得验证 - 但如果它不起作用,我会感到非常惊讶。

【讨论】:

请看我的回答。我同意它可能会作为 string 隐含地使用 nvarchar,但有一种方法可以显式调用数据类型。

以上是关于Unicode SQL 查询 W/ 参数而不是 N 前缀的主要内容,如果未能解决你的问题,请参考以下文章

使用 SC 排序规则的 SQL Server Unicode 查询

SQL Server再学习——varcharnvarcharchar的区别

w 是不是匹配 Unicode 标准中定义的所有字母数字字符?

SQL SERVER字符串前加N转换为Unicode编码

SQL SERVER字符串前加N转换为Unicode编码

python模块--re