2011-07-28 48 views
3

我有一些存储过程ñ前缀和参数

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

当我把这个proc用作exec MyProc 'Some english text'它的作品好。

但是,如果将其称为exec MyProc 'Русский текст'正在使用俄语字母表,则无法正常工作。

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

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

回答

6

N个只会(手动)需要如果你是串联在.NET代码的字符串。 如果您将SQLParameter声明为nvarchar,那么它是自动的:框架将为您处理它。

所以,你的客户端代码是不正确打开你到SQL注入

总之,N个说,字符串文字是unicode。

+1

<<因此,您的客户端代码不正确,可能会导致SQL注入问题>>为什么? – Alexandre

+0

@Alex Maslakov:搜索SQL注入和参数化:http://www.google.co.uk/search?q=SQL+Injection+and+parametrisation – gbn

+0

如何保护我的程序免受sql注入? – Alexandre

0

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

  • 如果它是.Net - 只是指定该参数具有Unicode类型。
  • 如果是OLEDB/ADO - 同样的事情,PARAM必须标记为unicode的,合格的wchar_t不是CHAR

更新从MSDN(注意为nvarchar) 样品:

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

请避免SQL注入;)

+0

.Net。我怎样才能指定它? – Alexandre

+0

@Alex Maslakov - 刚刚更新了示例 – Dewfy