]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文件解析都是一样的
     
原文地址:https://www.cnblogs.com/kevinl/p/14225086.html