/// <summary> /// 读取sql文件,返回插入的表信息 /// </summary> /// <param name="AllTexts">sql文本</param> /// <returns></returns> public List <SqlFileInfoStruct> GetTableInfo(string AllTexts) { //string[] AllLines = File.ReadAllLines(sPath, Encoding.Default); //读取文件中每个表的信息,表名称,表字段,字段值 List <SqlFileInfoStruct> list_sqlfileinfo = new List <SqlFileInfoStruct>(); Regex regex_text = new Regex(@"insert into[\s\S]+?;", RegexOptions.IgnoreCase); //整个表 MatchCollection mc_text = regex_text.Matches(AllTexts); if (mc_text.Count > 0) { foreach (Match match in mc_text) { SqlFileInfoStruct sqlFileInfoStruct = new SqlFileInfoStruct(); sqlFileInfoStruct.Text = match.Value; //获取表其他信息 GetOtherTableInfo(sqlFileInfoStruct, match.Value); //Console.WriteLine(match.Value); list_sqlfileinfo.Add(sqlFileInfoStruct); } } return(list_sqlfileinfo); }
/// <summary> /// 匹配sql字段数据 /// </summary> /// <param name="sqlFileInfoStruct">sql文件类</param> /// <param name="Text">tablename</param> public void GetOtherTableInfo(SqlFileInfoStruct sqlFileInfoStruct, string Text) { Regex regex_tablename = new Regex(@"(?<=insert into).*?(?=\()", RegexOptions.IgnoreCase); Regex regex_field = new Regex(@"(?<=insert into.*?\().*?(?=\))", RegexOptions.IgnoreCase); Regex regex_value = new Regex(@"(?<=\().*?(?=\)[,;])", RegexOptions.IgnoreCase); //表名 Match match_tablename = regex_tablename.Match(Text); if (match_tablename.Success) { sqlFileInfoStruct.TableName = match_tablename.Value.Replace(" ", ""); } //表字段 Match match_field = regex_field.Match(Text); if (match_field.Success) { foreach (string str in match_field.Value.Split(',')) { //去除标点符号 string newstr = Regex.Replace(str, @"[\s\`]", ""); sqlFileInfoStruct.Field.Add(newstr); } } //表字段值 MatchCollection mc_value = regex_value.Matches(Text); for (int i = 0; i < mc_value.Count; i++) { //过滤下字符串,如果字符串中包含","需要处理 var strlist = SplitStringWithComma(mc_value[i].Value); List <string> values = new List <string>(); foreach (var str in strlist) { values.Add(str); } sqlFileInfoStruct.Value.Add(i, values); } }