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";