C#往SQLServer中插入大数据
转自http://www.cnblogs.com/D-Wade-WP8/archive/2013/06/08/Wadeflash20130608001.html
以前插入大数据的时候都是一条一条的插入,由于电脑配置不行,有一次17万条数据用了半个小时才插入完成,那个蛋疼啊!
前面听杨中科老师的课,发现一个很好的东西,25万条数据配置好的电脑几秒钟就完成了,那是一个怎样神奇的代码呢?
我借花献佛下,呵呵 都是杨中科老师写的 拿出来晒晒 勿喷。
数据表T_Nums中有四个字段:NumSection,AddressStr,NumType,AreaCode
然后从文本文件中读取输入到一个DataTable中,然后将DataTable插入数据库即可 速度实在是太快了。
string connStr = "Data Source=WADE-PC;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=123456"; DateTime startTime = DateTime.Now; OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "文本文件(*.txt)|*.txt"; if (dialog.ShowDialog() == DialogResult.OK) { DataTable dt = new DataTable(); dt.Columns.Add("NumSection"); dt.Columns.Add("AddressStr"); dt.Columns.Add("NumType"); dt.Columns.Add("AreaCode"); IEnumerable<string> lines = File.ReadLines(dialog.FileName, Encoding.Default); foreach (string str in lines) { string[] strs = str.Split('\t'); DataRow row = dt.NewRow(); row["NumSection"] = strs[0]; row["AddressStr"] = strs[1].ToString().Trim('"'); row["NumType"] = strs[2].ToString().Trim('"'); row["AreaCode"] = strs[3].ToString().Trim('"'); dt.Rows.Add(row); } using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr)) { bulkCopy.DestinationTableName = "T_Nums"; bulkCopy.ColumnMappings.Add("NumSection", "NumSection"); bulkCopy.ColumnMappings.Add("AddressStr", "AddressStr"); bulkCopy.ColumnMappings.Add("NumType", "NumType"); bulkCopy.ColumnMappings.Add("AreaCode", "AreaCode"); bulkCopy.WriteToServer(dt); } TimeSpan ts = DateTime.Now.Subtract(startTime); MessageBox.Show("一共插入" + dt.Rows.Count + "条数据,用时:" + ts.ToString());