• ]C#中执行SQL文件脚本的代码(非常有用)


    我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析

    去除其中的注释,还有把每一句sql语句取出来,然后再利用各个平台中的数据库相关执行它。

    代码:    
    c#版本的
    
        //-------------------------第一种-------------------------------------
               /// <summary>
               /// 获取sql文件中的sql语句数组 第一种方法
               /// </summary>
               /// <param name="sql"></param>
               /// <returns></returns>
               public static string[] sql_split(string sql)
               {
                   string s = sql;
                   Regex reg = newRegex("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/");
                   reg.Replace(sql, "ENGINE=\1 DEFAULT CHARSET=utf8");
                   s = s.Replace('
    ', '
    ');
                   string[] ret = new string[10000];
                   string[] sqlarray = StringSplit(s, ";
    ");
                   int num = 0;
                   foreach (string item in sqlarray)
                   {
                       ret[num] = "";
                       string[] queries = item.Split('
    ');
                       queries = filter(queries);
                       foreach (string query in queries)
                       {
                           string str1 = query.Substring(0, 1);
                           string str2 = query.Substring(0, 2);
                           if (str1 != "#" && str2 != "--" && str2 != "/*"&& str2 != "//")//去除注释的关键步奏
                           {
                               ret[num] += query;
                           }
                       }
                       num++;
                   }
                   ret = filter(ret);
                   return ret;
               }
         
               /// <summary>
               /// 去除空值数组
               /// </summary>
               /// <param name="ss"></param>
               /// <returns></returns>
               public static string[] filter(string[] ss)
               {
                   List<string> strs = new List<string>();
                   foreach (string s in ss)
                   {
                       if (!string.IsNullOrEmpty(s)) strs.Add(s);
                   }
                   string[] result = strs.ToArray();
                   return result;
               }
               /// <summary>
               /// 将字符串分割成数组
               /// </summary>
               /// <param name="strSource"></param>
               /// <param name="strSplit"></param>
               /// <returns></returns>
               public static string[] StringSplit(string strSource, string strSplit)
               {
                   string[] strtmp = new string[1];
                   int index = strSource.IndexOf(strSplit, 0);
                   if (index < 0)
                   {
                       strtmp[0] = strSource;
                       return strtmp;
                   }
                   else
                   {
                       strtmp[0] = strSource.Substring(0, index);
                       returnStringSplit(strSource.Substring(index + strSplit.Length), strSplit, strtmp);
                   }
               }
         
               /// <summary>
               /// 采用递归将字符串分割成数组
               /// </summary>
               /// <param name="strSource"></param>
               /// <param name="strSplit"></param>
               /// <param name="attachArray"></param>
               /// <returns></returns>
               private static string[] StringSplit(string strSource, stringstrSplit, string[] attachArray)
               {
                   string[] strtmp = new string[attachArray.Length + 1];
                   attachArray.CopyTo(strtmp, 0);
         
                   int index = strSource.IndexOf(strSplit, 0);
                   if (index < 0)
                   {
                       strtmp[attachArray.Length] = strSource;
                       return strtmp;
                   }
                   else
                   {
                       strtmp[attachArray.Length] = strSource.Substring(0, index);
                       returnStringSplit(strSource.Substring(index + strSplit.Length), strSplit, strtmp);
                   }
               }
         
               //-----------------------------------------------------
         
               //-----------------------第二种------------------------------
               /// <summary>
               /// 获取sql文件中的sql语句数组 第二种
               /// </summary>
               /// <param name="sql"></param>
               /// <returns></returns>
               public string[] getsqls(string sql)
               {
                   string s = sql;
                   s = s.Replace("
    ", "
    ");
                   s = s.Replace("
    ","
    ").Trim();
                   string[] ret = new string[1000];
         
                   string[] sqlarray= StringSplit(s, ";
    ");
                   sqlarray = filter(sqlarray);//去空
         
                   int num=0;
                   foreach (string item in sqlarray)
                   {
                       string ret_item = "";
                       string[] querys = item.Trim().Split('
    ');
                       querys = filter(querys);//去空
         
                       foreach (string query in querys)
                       {
                           string str1 = query.Substring(0, 1);
                           string str2 = query.Substring(0, 2);
                           if (str1 == "#" || str2 == "--" || str2 == "/*"|| str2 == "//")//去除注释的关键步奏
                           {
                               continue;
                           }
                           ret_item += query;
                       }
                       ret[num] = ret_item;
                       num++;
                   }
                   return filter(ret);
               }
    
    c#两个方法对sql文件解析都是一样的
         
  • 相关阅读:
    一、vue常用指令
    win10安装和配置node
    win10安装和配置java8
    二、vue-cli4.5脚手架创建vue项目
    配置分布式事务实例:springcloud-Hoxton.SR1+springboot2.2.2+nacos1.3.2+seata1.2.0
    centos7安装frps_0.31.1
    centos7安装nginx1.18.0
    docker安装nexus3
    centos7防火墙的配置
    centos7使用Apache实现HTTP访问SVN资源库
  • 原文地址:https://www.cnblogs.com/kevinl/p/14225086.html
Copyright © 2020-2023  润新知