使用string.format动态地构建SQL查询

时间:2014-03-27 16:22:27

标签: c# sql

我有一个严重的格式化查询问题,它也可能导致SQL注入,我看到一些类似的qstns,但不知道我怎么能在C#中使用它,因为我是新手。我使用c#,Odbc命令

我有3个字符串 qry ="select description from TableA" , qryOrder = " order by description" , qryAppend = " where ID = '{0}' order by description\", _selectedPlantID"提供_selectedId是另一个变量,现在我想使用这些变量在不同的情况下形成差异查询,例如qry + qry orderqry + qryAppend

由于还需要_selectedPlantId,我使用string.Format作为:

_cmd.CommandText = "string.Format(\"" + qry + qryAppend + ")";

但它不起作用。任何解决方案 错误是引用

的SQL语法错误

提前感谢!!

1 个答案:

答案 0 :(得分:0)

简单地说,这应该使它工作。你需要两个变量(bool),我将在后面解释原因:

var shouldOrder = true;
var shouldAppend = true;

_cmd.CommandText = String.Format(
    "{0} {1} {2}",
    qry,
    shouldOrder ? qryOrder : String.Empty,
    shouldAppend ? qryAppend : String.Empty
);

这两个变量(shouldOrdershouldAppend)将帮助您在不同情况下进行" diff查询"正如你所说的那样。

为这些变量提供true或false将改变文本进入String.Format的内容,并相应地更改查询。

因此,如果您使用shouldOrder = false;,查询命令将无法获得订单部分。设置shouldAppend = false;将避免将额外部分(追加)包含在SQL命令中。

现在,小心!

这不会解决您的SQL注入问题。我刚刚展示了一个快速解决方案。

为避免SQL注入,您必须更改SQL命令,不能再使用String.Format了。

要了解如何操作,请查看DGibbs评论。