Sql N前缀和参数

Sql N前缀和参数,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一些存储过程 CREATE PROC MyProc ( @FullName NVARCHAR(200) = NULL ) AS --............. 当我把这个过程称为execmyproc'Some english text'时,它工作得很好 但是,如果将它称为使用俄语字母的exec MyProc'ª¥ССцццццццццСццццС 调用exec MyProc N'Пццццццццццццццц 我有一个客户端应用程序和。。。我需要为参数添加N前缀?如果是,我该怎么

我有一些存储过程

CREATE PROC MyProc ( @FullName NVARCHAR(200) = NULL )
    AS --.............
当我把这个过程称为
execmyproc'Some english text'
时,它工作得很好

但是,如果将它称为使用俄语字母的
exec MyProc'ª¥ССцццццццццСццццС

调用
exec MyProc N'Пццццццццццццццц


我有一个客户端应用程序和。。。我需要为参数添加N前缀?如果是,我该怎么做?

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


请参见Microsoft KB:

您使用哪种客户端应用程序

  • 如果是.Net-只需指定该参数具有Unicode类型
  • 如果是OLEDB/ADO,则必须将参数标记为unicode,并传递wchar\u t而不是char
更新 来自msdn的样品(注意NVarChar):


请避免SQL注入;)

只有在.net代码中连接字符串时才需要(手动)N。 如果您将一个声明为nvarchar,它是自动的:框架会为您处理它

因此,您的客户机代码不正确,使您可以进行SQL注入


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

为什么?@Alex Maslakov:搜索SQL注入和参数化:如何保护我的过程不受SQL注入的影响?@Alex Maslakov:根据链接,“参数化”
yourCommand.Parameters.Add(
    "@FullName", SqlDbType.NVarChar, 80).Value = "toasters";