在C#中评估SQL语句以确定它是否不仅仅是选择的最佳方法是什么? - 即 - 如果稍后执行该语句,则检查是否会更改值(插入,更新,删除,修改或删除)。
我可以使用的开箱即用C#dlls / functions的任何想法,或者这是我应该使用字符串解析技术编写自己的东西吗?
感谢。
答案 0 :(得分:12)
我会使用数据库权限。创建一个只具有读访问权限的数据库用户,然后,除SELECT之外的任何其他查询都将失败。
答案 1 :(得分:1)
一种方法是使用事务然后回滚,有明显的限制(可能不适用于复杂的查询,例如返回多个结果集以及其间的其他更新,并且不适用于使用非回滚命令的查询像DBCC一样 - 可能想要捕获异常以及类似的情况):
using(SqlConnection sqlConn = new sqlConnection(CONNECTION_STRING))
{
sqlConn.Open();
using (SqlTransaction trans = sqlConn.BeginTransaction())
{
// execute code and see if rows are affected here
var query = " ... " ;
var cmd = new SqlCommand(query, sqlConn);
var rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0) { ... }
// roll back the transaction
trans.RollBack();
}
sqlConn.Close();
}