如何在使用C#执行SQL查询之前验证它?

Ank*_*oni 5 c# sql database sql-server validation

我有一个文本框,用户输入他的SQL查询.但是,我需要创建一个程序来验证查询,然后再在数据库中执行它.

例如:

假设用户输入

SELECT A1,
       A2,
       A3 
  FROM XYZ
Run Code Online (Sandbox Code Playgroud)

所以,现在,在执行查询之前,我需要检查是否A1,A2以及A3存在于表XYZ与否.如果不是,则应向用户显示错误消息.

我无法想办法继续下去.那么,任何人都可以通过示例代码片段提供有关如何进一步处理的基本想法吗?

Dmi*_*nko 6

我怀疑你是否应该这样做:

  • 如果XYZ不是,而是视图,物化视图,存储过程(取决于RDBMS)返回游标
  • 如果XYZ是一个表,但用户没有权限(grant)来读取它?
  • 如果用户没有对A2字段阅读的许可,该怎么办?

还有其他一些情况应该加以考虑

  • 查询可以重写(例如,在Oracle的情况下通过FGA - 细粒度审计)
  • XYZ可以是任何内容的同义词,例如,在Hadoop上远程表的dblink,而这个Hadoop暂时停止服务

所以我建议在没有任何初步检查的情况下执行查询,但解析并解释抛出的异常(如果有的话).