2014-10-21 3 views
1

Я хотел бы запустить сценарий как:вручную дезинфицировать параметры SQL

CREATE LOGIN [me] WITH PASSWORD = @0 

и запустить его любит:

var createUserCommand = conn.CreateCommand(); 
createUserCommand.CommandText = script; 
createUserCommand.Parameters.AddWithValue("@0", passwordDecrypted); 

Однако, это бросает:

первого шанс исключение типа «System.Data.SqlClient.SqlException» произошел в System.Data.dll
Дополнительная информация: Неверная синхронизация налог около '@ 0'.

Из того, что я читал в Интернете (нигде официально, только из ответов SO/комментариев), невозможно использовать параметры SQL с операторами DDL. Ссылка на официальные документы для этого приветствуется!

OK. Мне нужно это параметризировать. Как я вижу, существует 2 варианта:

  • Я вручную дезинфицирую (.Replace("'", "''") => как я могу сделать это лучше всего?
  • Я звоню в .NET для дезинфекции для меня. Однако я полагаю, что это не дезинфицировано в ADO.NET, а просто прошло до SQL Server, и там было дезинфицировано ...

Какой был бы лучший подход?

ответ

0

Все, что вам нужно бежать является единственным ' для 2 х '

commandText = string.Format("CREATE LOGIN [me] WITH PASSWORD = '{0}'", pass.Replace("'", "''")); 

В качестве альтернативы можно создать хранимую процедуру с параметром пароля и использовать его для создания CREATE LOGIN строку, затем вы sp_executeSQL.

+0

Спасибо, это легко! Можете ли вы указать на дополнительную документацию, что этого достаточно? – Bertvan

+0

Я не могу найти окончательную документацию, но она упомянута здесь; http://msdn.microsoft.com/en-us/magazine/cc163523.aspx/ http://stackoverflow.com/questions/10476252/characters-that-must-be-escaped-in-tsql –

+0

Согласно MSDN link, не будет использовать QUOTENAME (SQL), который будет лучшим вариантом, чем использование String.Replace() (.NET) – Bertvan

Смежные вопросы