程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 處理數據批量生成sql插入語句

處理數據批量生成sql插入語句

編輯:C#入門知識

最近在做一個天氣預報模塊,首先需要將客戶端公網ip轉換成所在城市,然後將所在城市名轉換成對應的城市代碼,在網上找到了城市代碼,但是需要處理一下,看了看,有三百多城市及對應的城市代碼,想存到數據庫。就想著做一個數據處理自動生成sql語句的工具,提高效率。

城市代碼

一看上去很亂的,而且對應關系是每個省城市一行,代碼一行,分別用引號引起,用逗號分隔,每行間都沒有符號分隔,省名沒有用引號。首先是想著把省名去掉,因為每個城市名都是不相同的。想著每兩行兩行的去處理,但是也要費不少功夫,還容易出錯。就想個索性一次性的全處理的算法。

   ps:界面很簡單,上面是輸入數據,中間是轉換,下面是輸出數據。

後台主要代碼:

        private void button1_Click(object sender, EventArgs e)
        {
            string data = textBox1.Text.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "").Replace(" ", "").Replace("    ", "");
            MatchCollection matchsdata = matches(data, "\"[\\s\\S]*?\"");
            string[,] temps = new string[matchsdata.Count / 2, 2];
            int count0 = 0;
            int count1 = 0;
            string input = string.Empty;
            foreach (Match m in matchsdata)
            {
                string tempdata = m.Value.Replace("\"", "");
                try
                {
                    int tryp = int.Parse(tempdata);
                    temps[count1, 1] = tempdata;
                    count1++;
                }
                catch (Exception ex)
                {
                    temps[count0, 0] = tempdata;
                    count0++;
                }
            }
            for (int i = 0; i < (matchsdata.Count / 2); i++)
            {
                input += "insert into tbl_CityCode(c_city,c_code) values('" + temps[i, 0] + "','" + temps[i, 1] + "')\r\n";
            }
            textBox2.Text = input;
        }

        public static MatchCollection matches(string str, string exp)
        {
            return Regex.Matches(str, exp, RegexOptions.IgnoreCase);
        }

 首先是將輸入的數據處理,去除換行符,空格什麼的。然後你應該是會得到一行數據,然後通過正則表達式匹配出所有帶引號的數據,你會發現需要的數據全部都是用引號引起來的,但是怎樣區分城市名和城市代碼呢,它們是混在一起的。不用擔心,你發現了嗎?城市名是字符串,城市代碼是一串數字,我們只要將匹配出的數據數組遍歷,每一行數據都去轉換成int類型,這樣城市名的行就會報錯,在catch中捕捉,這一行就是城市名,沒錯的就是城市代碼,把數據一次存到一個二維數組,對應的列中就行了。這樣就會獲得了相對應的城市名和城市代碼。生成的sql語句要對應相應的數據庫表。

表結構:

轉換完了將生成的sql語句放到查詢器中執行就ok了。共處理了349個城市。

 

最後不放心自己的算法,隨機抽查了幾條數據,沒有錯誤。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved