手动清理SQL参数

时间:2014-10-21 14:58:15

标签: sql ado.net ddl

我想运行一个类似的脚本:

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语句一起使用。欢迎链接到官方文档!

行。我确实需要这个参数化。在我看来,有两个选择:

  • 我手动清理(.Replace("'", "''")=>我怎么能做到最好?
  • 我打电话给.NET来为我消毒。但是我假设这在ADO.NET中没有被清理,但只是过去了SQL Server,并在那里进行了清理......

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您需要逃脱的只是单'到2 x '

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

另一种方法是使用密码参数创建存储过程,并使用它来构建CREATE LOGIN字符串,然后sp_executeSQL