在C#中评估sql语句的最佳方法是什么?

时间:2011-12-12 20:21:18

标签: c# sql dll

在C#中评估SQL语句以确定它是否不仅仅是选择的最佳方法是什么? - 即 - 如果稍后执行该语句,则检查是否会更改值(插入,更新,删除,修改或删除)。

我可以使用的开箱即用C#dlls / functions的任何想法,或者这是我应该使用字符串解析技术编写自己的东西吗?

感谢。

2 个答案:

答案 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();
}