我有一段代码,做这样的事情:有没有简单的方法来检查SQL语句是否会更新数据库?
if (sqlStatement.WillUpdateDatabase)
DoThing1();
else
DoThing2();
目前WillUpdateDatabase
实现为
public bool WillUpdateDatabase {
get { return statementText.StartsWith("SELECT"); }
}
这捕获大多数情况下,但它可以与SELECT ... INTO ...
更加复杂。可能还需要考虑其他一些情况。
只是要清楚:这不是实现任何类型的安全。还有其他系统可以检查SQL注入攻击,这段代码只需要做出是否执行thing1或thing2的选择。
这似乎应该是一个解决的问题。有没有行业标准的方法可靠地做到这一点?
更新/说明:类似UPDATE Table1 SET Column1 = 'a' WHERE 1 = 2
应该被视为更新。
难道你不能'.Contains(“UPDATE”)'和'.Contains(“INSERT”)'? – EpicKip
@Jonny如果SQL包含一个'UPDATE'而不是'WHERE'子句,那么没有记录会被更新。这算作'会更新数据库'吗? – mjwills
你不能预测它是否会更新一个值,直到它有效地尝试它...所以,不,你不能真正检查这个 –