比如說建了一個新表,需要向裡面插入資料,資料量小還好,如果需要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管理工具中執行就可以了...