用Regex和C#批量產生SQL語句

來源:互聯網
上載者:User

 

比如說建了一個新表,需要向裡面插入資料,資料量小還好,如果需要1000條呢,那就算用Ctrl+C,Ctrl+V也是很費勁的.大家都知道程式員是會偷懶的,也是偉大的,呵呵,我們可以用程式批量產生SQL語句,寫到一個文字檔中,開啟文字檔,Ctrl+A,Ctrl+C,最後Ctrl+V...你懂的...(其實可以用程式直接運行就插入到資料庫表中,但這裡為了示範執行過程,我就用Ctrl+...)

先來理清下我們的思路吧:

1,我們要先看下我們的需求,需要些什麼欄位.

2,我們怎麼去找到需要的這些欄位.

3,怎麼樣將找到的欄位拼接成我們所需要的SQL語句.

4,產生文字檔,然後在SQL管理工具中執行.

 

首先,我們要建什麼表呢,我們看一下:

use ItCast201112

go

create table MyStudent

(

Fid int identity(1,1) primary key,

FName nvarchar(10),

FAge int,

FGender nvarchar(10),

FMath int,

FEnglish int

)

好,那我們的需求知道了,那就下一步了,先將以上的SQL語句儲存在一個文字檔中,命名為table.txt.

注意:儲存的文字檔的格式,我測試用的是UTF-8,其餘的我沒測試,但一定要注意格式,否則會出現亂碼的哦(注意是中文,英文不受影響)!我記得UTF-8是針對中文的.

 

那下面我們就去找我們要的欄位了.方法有很多,我這裡用Regex來產生一個...

string firstName = System.IO.File.ReadAllText("百家姓.txt",Encoding.Default);

List<string> firstNames = new List<string>();//用集合比較方便點,不要也可以.

            //摘取姓,Regex

            MatchCollection ms = Regex.Matches(firstName, @"〔(\w{1,2})〕");

            foreach (Match m in ms)

            {

                if (m.Success)

                {

                    firstNames.Add(m.Groups[1].Value.ToString());

                }

            }

            //得到男孩名

            string[] boyNames = System.IO.File.ReadAllLines("好聽的男孩名字.txt", Encoding.UTF8);

            //得到女孩名

            string girlNameString = System.IO.File.ReadAllText("好聽的女孩的名字.txt", Encoding.Default);

            string[] girlNames = girlNameString.Split(new char[] { '、' },StringSplitOptions.RemoveEmptyEntries);

            //根據使用者的需要,產生姓名,接收使用者的輸入

            Console.WriteLine("請輸入要需要多少個名字!!!");

            string read=Console.ReadLine();

            int a;

            while (!int.TryParse(read, out a))

            {

                Console.WriteLine("您輸入的有誤,請重新輸入!");

                read = Console.ReadLine();

            }

            StringBuilder sb = new StringBuilder();

            Random r = new Random();

            //取名           

            for (int i = 0; i < a; i++)

            {

                int gender = r.Next(0, 2);

                if (gender == 0)

                {

                    string boys = string.Format("{0}{1}\t\t{2}\t\t{3}", firstNames[r.Next(firstNames.Count)], boyNames[r.Next(boyNames.Length)],r.Next(18,31),"男");//拼成格式:姓+名,年齡,性別

                    sb.AppendLine(boys);//加到StringBuilder中去,每條"姓+名,年齡,性別"用換行隔開

                }

                else

                {

                    string girls = string.Format("{0}{1}\t\t{2}\t\t{3}",firstNames[r.Next(firstNames.Count)],girlNames[r.Next(girlNames.Length)],r.Next(18,31),"女");

                    sb.AppendLine(girls);

                }

            }

            System.IO.File.WriteAllText(@"c:\name1.txt",sb.ToString());

...

檔案名稱為:name1.txt

 

既然得到了姓名,年齡,性別,這幾個欄位了,就好做,你下一步就該怎麼拼接SQL字串了!

建立一個c#控制台應用程式:CreateSQL,將table.txt和name1.txt拷貝到此項目的的bin-Debug目錄下.在主程式中代碼如下:

string MySql="insert into Mystudent(FName,FAge,FGender,FMath,FEnglish) values('{0}',{1},'{2}',{3},{4})";//先寫一個拼接的模型

string table=System.IO.File.ReadAllText(@"table.txt",Encoding.UTF8);//將建立表的語句讀取出來,在這裡沒什麼太大的作用,只是為了後面一起寫入到文字檔中去而已.

string[] nameString=System.IO.File.ReadAllLines(@"name1.txt",Encoding.UTF-8);

StringBuilder sb=new StringBuilder();//因為是大量的字串,所以選用它

sb.AppendLine(table);

Random r=new Random();//聲明一個隨機數對象,是為了後面隨機產生數學英語分數

foreach(string names in nameString)

{

string name=names.Split(new char[]{'\t'},StringSplitOptions.RemoveEmptyEnteies);

string sql=string.Format(MySql,name[0],name[2],name[1],r.Next(150),r.Next(150));//這裡有點不好理解?慢慢品味吧!如果把MySql換成它裡面儲存的字串,是不是就理解了!

sb.AppendLine(sql);//加到StringBuilder中,與上一次加入的之間有換行,因為用的AppendLine...

sb.AppendLine("go");

}

System.IO.File.WriteAllText(@"d:\DataBase\InsertSQL.txt",sb.ToString());//將StringBuilder儲存的字串寫到文字檔中去...

這樣就搞定了.開啟剛剛產生的檔案,複製你想要的,到SQL管理工具中執行就可以了...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.