我想让我的 sql 查询防弹,发现这个关于清理表/列名的问题。
我遵循了建议,但不知何故它没有按预期工作。
我的表名是foo.Bar
所以我将它传递给CommandBuilder
'QuoteIdentifier
方法并[foo.Bar]
返回给我。
当我打电话给(string)cmd.ExecuteScalar();
它时抱怨这个表不存在。所以我尝试最初将表名定义为[foo].[Bar]
. 在这种情况下,QuoteIdentifier
创建[[foo]].[Bar]]]
也不起作用。
唯一有效的是当我指定时[foo].[Bar]
不使用该QuoteIdentifier
方法。
在这一点上,我想知道是否可以使用它来保护我的查询?它没有多大用处,并且像另一个答案所暗示的那样调整引用的查询似乎也不正确。
我能做些什么来保护查询并使其工作并接受名称[foo].[Bar]
而不破坏它吗?
这就是我创建查询的方式:
cmd.CommandText = string.Format(
"SELECT {0} FROM {1} WHERE {2} = '{3}'{4}",
...,
sanitizedTableName, // only [foo].[Bar] works -- [[foo]].[Bar]]] and [foo.Bar] fail
...,
...,
...);