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

标签 c# sql sql-server database validation

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

例如:

假设用户输入

SELECT A1,
       A2,
       A3 
  FROM XYZ

所以现在,在执行查询之前,我需要检查表XYZ 中是否存在A1A2A3 与否。否则,应向用户显示一条错误消息。

我想不出继续下去的方法。 那么任何人都可以通过示例代码片段给出关于如何进一步进行的基本想法吗?

最佳答案

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

  • 如果 XYZ 不是一个,而是一个 View 实体化 View 存储返回游标的过程(取决于 RDBMS)?
  • 如果 XYZ 是一个表,但用户没有权限 (grant) 读取它怎么办?
  • 如果用户没有权限,比方说,A2 实地阅读怎么办?

还有其他情况需要考虑

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

所以我建议执行查询任何初步检查,但解析和解释如果有异常则抛出。

关于c# - 如何在使用 C# 执行 SQL 查询之前验证它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38605191/

相关文章:

sql - 如何减少SQL Server中的查询运行时间?

sql-server - 添加约束与自身冲突,即使它还不存在

sql - 如何使用表 B 中的信息更新表 A 中的列

c# - 多个线程读取静态对象是否安全?

c# - 加密包含 unicode 的字符串会导致无法识别的字符

c# - 下拉列表中的值更改时,在Mainwindow中动态加载用户控件

mysql - 将 4 个表连接在一起

sql - ActiveRecord 根据属性值查找关系中记录的位置(索引)

c# - 如何在运行时暂时禁用捆绑和缩小?

mysql - 将行分组为相同大小的 block 并获取某些列的聚合