C# T命令?几乎+1。。这可能是最安全的方法,但它不能直接回答问题。我想说这是一个“X/Y问题”。。。这个答案解决了X.@Rachel-请注意,如果用户可以执行修改数据的存储过程,那么拥有存储过程执行权限的用户可能能够修改数据,即使用户除了在表上选择之外没有任

C# T命令?几乎+1。。这可能是最安全的方法,但它不能直接回答问题。我想说这是一个“X/Y问题”。。。这个答案解决了X.@Rachel-请注意,如果用户可以执行修改数据的存储过程,那么拥有存储过程执行权限的用户可能能够修改数据,即使用户除了在表上选择之外没有任,c#,sql-server,sqlconnection,query-parser,C#,Sql Server,Sqlconnection,Query Parser,T命令?几乎+1。。这可能是最安全的方法,但它不能直接回答问题。我想说这是一个“X/Y问题”。。。这个答案解决了X.@Rachel-请注意,如果用户可以执行修改数据的存储过程,那么拥有存储过程执行权限的用户可能能够修改数据,即使用户除了在表上选择之外没有任何其他权限。@Miky,这个问题的直接答案是一个太大、太复杂、太重和不确定的解决方案,无法实际考虑。即使使用ANTLR,这仍然非常困难,而且极易出错。(您需要一个完整准确的语法)同意,但这确实比在查询字符串中搜索“SELECT”这个词要好。我想


T命令?几乎+1。。这可能是最安全的方法,但它不能直接回答问题。我想说这是一个“X/Y问题”。。。这个答案解决了X.@Rachel-请注意,如果用户可以执行修改数据的存储过程,那么拥有存储过程执行权限的用户可能能够修改数据,即使用户除了在表上选择之外没有任何其他权限。@Miky,这个问题的直接答案是一个太大、太复杂、太重和不确定的解决方案,无法实际考虑。即使使用ANTLR,这仍然非常困难,而且极易出错。(您需要一个完整准确的语法)同意,但这确实比在查询字符串中搜索“SELECT”这个词要好。我想知道,如果您使用的是SQLCommand对象,是否可以在执行之前检查CommandType属性?否。CommandType允许您指定文本是查询还是存储过程。它从不自动设置。真遗憾。您可能会认为,在整个SQL server命名空间可用的情况下,您将能够在其中找到一个解析器!即使使用ANTLR,这仍然是非常困难的,并且极易出错。(您需要一个完整准确的语法)同意,但这确实比在查询字符串中搜索“SELECT”这个词要好。我想知道,如果您使用的是SQLCommand对象,是否可以在执行之前检查CommandType属性?否。CommandType允许您指定文本是查询还是存储过程。它从不自动设置。真遗憾。您可能会认为,在整个SQL server命名空间可用的情况下,您将能够在其中找到一个解析器!sql语句需要是动态的,这样存储过程就不存在了。它适用于QueryBuilder引擎,允许用户从数据库中选择几乎任何内容。我还希望避免使用LinqToSql,因为定义可以从数据库中选择的内容的是管理员用户,而不是我。sql语句需要是动态的,这样存储过程就不存在了。它适用于QueryBuilder引擎,允许用户从数据库中选择几乎任何内容。我还希望避免使用LinqToSql,因为管理员用户是定义可以从数据库中选择什么的用户,而不是我。
if (stringSql.Substring(0, 6).ToUpper() == "SELECT")
{
    //execute statement
}