N前缀和参数

时间:2011-07-28 10:09:16

标签: sql sql-server-2008-r2

我有一些存储过程

CREATE PROC MyProc ( @FullName NVARCHAR(200) = NULL )
    AS --.............

当我将此proc称为exec MyProc 'Some english text'时,效果很好。

但如果将其称为exec MyProc 'Русский текст'使用俄语字母,则无效。

呼叫exec MyProc N'Русский текст'再次运作良好。

我有一个客户端应用程序并且......我需要在参数中添加N前缀?如果是,我该怎么做?

3 个答案:

答案 0 :(得分:6)

如果要连接.net代码中的字符串,则只需要(手动)N. 如果你将SQLParameter声明为nvarchar,它会自动生成:框架会为你处理它。

因此,您的客户端代码不正确并打开 SQL注入

无论如何,N说字符串文字是unicode。

答案 1 :(得分:0)

N表示国家语言字符集也称为Unicode。

请参阅Microsoft KB:You must precede all Unicode strings with a prefix N when you deal with Unicode string constants in SQL Server

答案 2 :(得分:0)

您使用什么样的客户端应用程序?

  • 如果是.Net - 只需指定该参数具有Unicode类型。
  • 如果是OLEDB / ADO - 同样的事情,param必须标记为unicode,并传递wchar_t而不是char

<强>更新 样本来自msdn(注意NVarChar):

yourCommand.Parameters.Add(
    "@FullName", SqlDbType.NVarChar, 80).Value = "toasters";

请避免SQL注入;)