N префикс и параметр - PullRequest
3 голосов
/ 28 июля 2011

У меня есть некоторая хранимая процедура

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

Когда я называю этот процесс как exec MyProc 'Some english text', он работает хорошо.

Но если назвать его как exec MyProc 'Русский текст', который использует русский алфавит,это не работает должным образом.

И звонок exec MyProc N'Русский текст' снова работает хорошо.

У меня есть клиентское приложение и ... мне нужно добавить префикс N к параметрам?Если да, то как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 28 июля 2011

N будет необходимо (вручную) только в том случае, если вы объединяете строку в коде .net.Это автоматически, если вы объявляете SQLParameter как nvarchar: фреймворк позаботится об этом за вас.

Таким образом, ваш код клиента неверен и открывает вас до SQL-инъекция

В любом случае, N говорит, что строковый литерал - это Unicode.

0 голосов
/ 28 июля 2011

Какое клиентское приложение вы используете?

  • , если это .Net - просто укажите, что параметр имеет тип Unicode.
  • Если это OLEDB / ADO - то же самое, param должен быть помечен как unicode и передать wchar_t вместо char

Update Пример из msdn (обратите внимание на NVarChar):

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

И, пожалуйста, избегайте SQL-инъекций;)

0 голосов
/ 28 июля 2011

N означает набор символов на национальном языке, также известный как Unicode.

См. В Microsoft KB: Вы должны предшествовать всем строкам Unicode с префиксом N при работе со строковыми константами Unicode в SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...