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

在C#中计算sql语句的最佳方法是什么?,c#,sql,dll,C#,Sql,Dll,用C语言计算SQL语句的最佳方法是什么,以确定其功能是否不仅仅限于选择Ie-检查如果以后执行语句,值是否会更改(插入、更新、删除、修改或删除) 关于我可以使用的开箱即用的C#DLL/函数,有什么想法吗?或者这是我应该使用字符串解析技术自己编写的代码吗 谢谢。一种方法是使用事务,然后回滚,但有明显的限制(可能不适用于复杂的查询,如返回多个结果集并在其间进行其他更新的查询,也不适用于使用非回滚命令(如DBCC)的查询-可能还希望捕获类似情况下的异常): 我会使用db权限。创建一个具有只读访问权限的数

用C语言计算SQL语句的最佳方法是什么,以确定其功能是否不仅仅限于选择Ie-检查如果以后执行语句,值是否会更改(插入、更新、删除、修改或删除)

关于我可以使用的开箱即用的C#DLL/函数,有什么想法吗?或者这是我应该使用字符串解析技术自己编写的代码吗


谢谢。

一种方法是使用事务,然后回滚,但有明显的限制(可能不适用于复杂的查询,如返回多个结果集并在其间进行其他更新的查询,也不适用于使用非回滚命令(如DBCC)的查询-可能还希望捕获类似情况下的异常):


我会使用db权限。创建一个具有只读访问权限的数据库用户,然后,除选择之外的任何查询都将失败。

用例是什么?您是在评估用户输入的即席查询(可能是恶意的),还是在应用程序内部实现某种功能?用户将输入查询,然后我的代码将执行查询(如果确定查询是非恶意的,并且不修改数据源)。让用户输入LINQ表达式如何?小警告-即使是
SELECT
也会使服务器瘫痪。。。交叉连接或7应该足够了……如果他想安全地检查查询是否会改变数据,那么这就是他必须进行的权衡。试图解析SQL将产生一系列问题,只是在等待注入攻击。@MarcGravel-是的,我不知道如何通过您对查询文本所做的任何操作来预测它。我并不反对-我只是提到了,以便OP了解上下文lolz@Bigfellahull。您是否决定否决我,因为我说的是最佳答案是马克的评论吗?
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();
}