我有一些存储过程
CREATE PROC MyProc ( @FullName NVARCHAR(200) = NULL )
AS --.............
当我将此proc称为exec MyProc 'Some english text'
时,效果很好。
但如果将其称为exec MyProc 'Русский текст'
使用俄语字母,则无效。
呼叫exec MyProc N'Русский текст'
再次运作良好。
我有一个客户端应用程序并且......我需要在参数中添加N前缀?如果是,我该怎么做?
答案 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)
您使用什么样的客户端应用程序?
<强>更新强> 样本来自msdn(注意NVarChar):
yourCommand.Parameters.Add(
"@FullName", SqlDbType.NVarChar, 80).Value = "toasters";
请避免SQL注入;)