通常狀況下,咱們在向數據庫中插入數據時用Insert語句,可是當數據量很大的時候,這種狀況就比較緩慢了,這個時候就須要SqlBulkCopy這個類。web
SqlBulkCopy自己經常使用的函數有這麼幾個數據庫
DestinationTableName-----服務器目標表上的名稱,也就是你要向哪一個表插入大量的數據,這個就設置爲那個表名c#
ColumnMappings-----字段映射,由於是要在本地創建一個Table,而後將整個Table一次性的加入到數據庫中,所以須要將本地的Table的字段和數據庫表中的字段作好映射關係數組
WriteToServer-----這個就是寫入數據庫了,不須要多說服務器
導入的數據是傳智播客免費視頻上提供的手機號碼歸屬地的信息,插入數據庫看了一下,一共有258113條數據,用時大概6秒吧。app
private void btnDR_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本文件|*.txt"; if(ofd.ShowDialog()!=true) { return; } DateTime time = DateTime.Now;//計時,看看花了多長時間 DataTable table = new DataTable();//本地建立一個臨時表 //給臨時表添加列名 table.Columns.Add("HD"); table.Columns.Add("DQ"); table.Columns.Add("LX"); using(StreamReader streamReader=new StreamReader(ofd.FileName,Encoding.Default))//讀取文件 { while(!streamReader.EndOfStream) { string[] stringStream = streamReader.ReadLine().Split('\t');//按行讀取,經過\t進行分割,獲得數組 string HD = stringStream[0].Trim('"'); string DQ = stringStream[1].Trim('"'); string LX = stringStream[2].Trim('"'); //將數據插入到本地建立的臨時表裏 DataRow row = table.NewRow(); row["HD"] = HD; row["DQ"] = DQ; row["LX"] = LX; table.Rows.Add(row); } } //這部分就是從本地導入到數據庫中 using(SqlConnection conn=new SqlConnection("Data Source=.;Initial Catalog=imageprocess;Integrated Security=True")) { conn.Open(); using(SqlBulkCopy bulkCopy=new SqlBulkCopy(conn)) { bulkCopy.DestinationTableName = "T_HM"; bulkCopy.ColumnMappings.Add("HD", "HD");//前面的參數是本地的臨時Table列名,後面的參數是數據庫的列名。兩個名稱不須要相同,我寫相同,是爲了方便 bulkCopy.ColumnMappings.Add("DQ", "DQ"); bulkCopy.ColumnMappings.Add("LX", "LX"); bulkCopy.WriteToServer(table); } } TimeSpan TS = DateTime.Now - time; MessageBox.Show(TS.ToString()); }