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

时间:2016-07-27 06:22:41

标签: c# sql sql-server database validation

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

例如:

假设用户输入

SELECT A1,
       A2,
       A3 
  FROM XYZ

现在,在执行查询之前,我需要检查表A1中是否存在A2A3XYZ。如果没有,则应向用户显示错误消息。

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

4 个答案:

答案 0 :(得分:6)

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

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

还有其他需要考虑的案例

  • 查询可以重写(例如,通过FGA进行Oracle - 精细谷物审核)
  • XYZ可以是同义词,例如: dblink到Hadoop上的远程表,而这个Hadoop暂时停止服务

所以我建议执行查询而不用进行任何初步检查,但解析并解释异常抛出(如果有的话)。

答案 1 :(得分:1)

非常合适的方法是在MS SQL中执行代码,让MS SQL找出错误。

StringBuilder  query= new StringBuilder();

query.Append("BEGIN \n");
query.Append("BEGIN TRY \n");
query.Append("    -- Table does not exist; object name resolution   \n");
query.Append("    -- error not caught.   \n");
query.Append("    --Append the variable which holds your sql query \n");
query.Append("    --For eg.: SELECT * FROM NonexistentTable;   \n");
query.Append("    END TRY \n");
query.Append("    BEGIN CATCH \n");
query.Append("      SELECT \n");
query.Append("        ERROR_NUMBER() AS ErrorNumber \n");
query.Append("       ,ERROR_MESSAGE() AS ErrorMessage; \n");
query.Append("    END CATCH \n");
query.Append("END");

使用SQLCommand的ExcecuteScalar()超出查询。

SQL Server将返回提交查询的确切错误。

答案 2 :(得分:0)

  

现在,在执行查询之前,我需要检查XYZ表中是否存在A1,A2和A3。

如果要检查表中是否存在值,则必须在表中查询。如果不执行查询,则无法找到表中是否存在该值。

如果您在SQL Server(,例如)中工作,那么您可以使用IF EXISTS子句,如

IF EXISTS(
    SELECT *
    FROM sys.columns 
    WHERE Name = 'A1' AND Name = 'A2' AND Name = 'A3' 
      AND Object_ID = Object_ID(N'XYZ'))
BEGIN

END

答案 3 :(得分:0)

可能你需要一个接一个地做。首先检查表XYZ是否存在

SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'XYZ';

然后会出现下一个问题,即表格中的字段名称是否存在

SELECT * FROM   INFORMATION_SCHEMA.COLUMNS
          WHERE  TABLE_NAME = 'XYZ'
                 AND COLUMN_NAME = 'A1'
                 AND COLUMN_NAME = 'A2'
                 AND COLUMN_NAME = 'A3'