Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }