一般情況下,我們在向數據庫中插入數據時用Insert語句,但是當數據量很大的時候,這種情況就比較緩慢了,這個時候就需要SqlBulkCopy這個類。
SqlBulkCopy本身常用的函數有這么幾個
DestinationTableName-----服務器目標表上的名稱,也就是你要向哪個表插入大量的數據,這個就設置為那個表名
ColumnMappings-----字段映射,因為是要在本地建立一個Table,然后將整個Table一次性的加入到數據庫中,因此需要將本地的Table的字段和數據庫表中的字段做好映射關系
WriteToServer-----這個就是寫入數據庫了,不需要多說
導入的數據是傳智播客免費視頻上提供的手機號碼歸屬地的信息,插入數據庫看了一下,一共有258113條數據,用時大概6秒吧。

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()); }
新聞熱點
疑難解答