日期:2014-05-17  浏览次数:20825 次

分割字符串到数据表中,有点难度。
问个有难度的问题:
字符串:BJ#001#Q31,500,2000#Q24,500,2000#Q04,600,2500#Q35,650,2500#Q48,700,3200#Q42,750,3500#Q66,800,4000#

TABLE
CREATE TABLE WW_TEST

  WW_CITYID VARCHAR2(20), //城市ID
  WW_MARKETID VARCHAR2(20),//商超ID
  WW_PLUID VARCHAR2(50), //物料ID
  WW_QTYSOLD VARCHAR2(50),// 数量
  WW_AMOUNT VARCHAR2(50) // 金额

把上面的字符串分割到下面的table里,前两个#号隔开的固定了,后面的循环插入。

C# code

                        string[] ssArray = s.Split('#');
                        for (int j = 2; j <= ssArray.GetUpperBound(0); j++)
                        {
                            string[] sArray = ssArray[j].Split(',');
                            string sql1 = "insert into ww_test values" +
                             "('"+ sArray[0] + "','"
                            + sArray[1] + "','"
                            + sArray[2] + "','"
                            + sArray[3] + "','"
                            + sArray[4] + "',')";
                            ocomm.CommandText = sql1;
                            ocomm.ExecuteNonQuery();
                        }
                    }



上面的代码,如果没有 城市ID和商超ID,是可以插进去的。

------解决方案--------------------
C# code
        string s = "BJ#001#Q31,500,2000#Q24,500,2000#Q04,600,2500#Q35,650,2500#Q48,700,3200#Q42,750,3500#Q66,800,4000#";
        Match match = Regex.Match(s, @"(?<cityId>\w+)#(?<marketId>\w+)(?<value>.+)");
        string cityId = match.Groups["cityId"].Value;
        string marketId = match.Groups["marketId"].Value;
        string[] rows = match.Groups["value"].Value.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string row in rows)
        {
            string[] columns = row.Split(',');
            string sqlStr = string.Format("insert into 表名 values('{0}','{1}','{2}','{3}','{4}')", cityId, marketId, columns[0], columns[1], columns[2]);
            Response.Write(sqlStr + "<br/>");
        }