我有一个严重的格式化查询问题,它也可能导致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 order
或qry + qryAppend
。
由于还需要_selectedPlantId
,我使用string.Format作为:
_cmd.CommandText = "string.Format(\"" + qry + qryAppend + ")";
但它不起作用。任何解决方案 错误是引用
的SQL语法错误提前感谢!!
答案 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
);
这两个变量(shouldOrder
和shouldAppend
)将帮助您在不同情况下进行" diff查询"正如你所说的那样。
为这些变量提供true或false将改变文本进入String.Format的内容,并相应地更改查询。
因此,如果您使用shouldOrder = false;
,查询命令将无法获得订单部分。设置shouldAppend = false;
将避免将额外部分(追加)包含在SQL命令中。
这不会解决您的SQL注入问题。我刚刚展示了一个快速解决方案。
为避免SQL注入,您必须更改SQL命令,不能再使用String.Format了。
要了解如何操作,请查看DGibbs评论。