【问题标题】:Unicode SQL Query W/ Parameter instead N PrefixUnicode SQL 查询 W/ 参数而不是 N 前缀
【发布时间】: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

【问题讨论】:

    标签: c# sql sql-server unicode


    【解决方案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,但有一种方法可以显式调用数据类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多