Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#。Regex检查所有参数是否以“开始”;";在sql过程中_C#_Regex - Fatal编程技术网

C#。Regex检查所有参数是否以“开始”;";在sql过程中

C#。Regex检查所有参数是否以“开始”;";在sql过程中,c#,regex,C#,Regex,如何使用正则表达式检查过程中的所有参数是否都以“p_”开头 程序示例: DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_in_sys_blablabla`$$ CREATE PROCEDURE `sp_in_sys_blablabla`( p_cod_componente INT(11), cod_tipo_ocorrencia SMALLINT(4), p_dat_inicio CHAR(30), dat_fim C

如何使用正则表达式检查过程中的所有参数是否都以“p_”开头

程序示例:

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_in_sys_blablabla`$$

CREATE  PROCEDURE `sp_in_sys_blablabla`(
    p_cod_componente INT(11),
    cod_tipo_ocorrencia SMALLINT(4), 
    p_dat_inicio CHAR(30), 
    dat_fim CHAR(30), 
    p_cod_usu_inc CHAR(10), 
    p_datInc CHAR(40)
)
BEGIN
    DECLARE v_excecao SMALLINT DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET v_excecao = 1;
    START TRANSACTION;
......
END$$
C#代码:


在我看来,你有两个选择:

  • 您可以使用正则表达式。逐行阅读sql语句。确保你在程序声明中!我认为这是非常容易出错的,因为从语法上讲这是不必要的。实际的正则表达式似乎非常简单
    p_u1;[a-z]+

  • 使用解析器(即)。您可能会找到SQL语法的语法。然后,您可以获取过程声明中的任何参数,并检查它是否
    StartsWith(“p_”)


  • 检查过程的最佳方法是使用Microsoft.SqlServer.Transact-SQL.ScriptDom。
    这个软件包提供了完整的支持,可以一步一步地验证过程中的语句。

    我认为这应该使用语法来完成。@Matthias Koch:听起来是个好主意
    string content = "proceddure code"; 
    Regex regex = new Regex(regras[i].Regex, RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
    
    if (regex.IsMatch(content)) Console.WriteLine(ERROR_MESSAGE);