黑马程序员 使用SqlBulkCopy大批量导入数据

 1 //使用SqlBulkCopy大批量导入数据         
 2         private void btnBulk_Click(object sender, RoutedEventArgs e)
 3         {
 4             string connStr = ConfigurationManager.ConnectionStrings["myConnStr"].ConnectionString;
 5             OpenFileDialog ofd = new OpenFileDialog();
 6             ofd.Filter = "文本文件|*.txt";
 7             if (ofd.ShowDialog() == false)
 8             {
 9                 return;
10             }
11             string[] lines =
12                 File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
13             //构造一个Datatable存储将要批量导入的数据
14             DataTable table = new DataTable();
15             table.Columns.Add("StartTelNum");
16             table.Columns.Add("City");
17             table.Columns.Add("TelType");
18             for (int i = 1; i < lines.Count(); i++)
19             {
20                 string line = lines;
21                 string[] strs = line.Split('\t');//去掉两边的双引号:"北京市"
22                 string startTelNum = strs[0];
23                 string city = strs[1];
24                 city = city.Trim('"');
25                 string telType = strs[2];
26                 telType = telType.Trim('"');
27                 DataRow dr = table.NewRow();
28                 dr["StartTelNum"] = startTelNum;
29                 dr["City"] = city;
30                 dr["TelType"] = telType;
31                 table.Rows.Add(dr);
32             }
33             //实际的开发可能会遇到数据大批量插入数据的问题,若是一条条的循环导入效率非常低下,使用SqlBulkCopy大批量导入数据。
34             using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))
35             {
36                 //设置要批量写入的表
37                 bulkCopy.DestinationTableName = "T_TelNum";
38                 //自定义的datatable和数据库的字段进行对应
39                 bulkCopy.ColumnMappings.Add("StartTelNum","StartTelNum");
40                 bulkCopy.ColumnMappings.Add("City", "TelArea");
41                 bulkCopy.ColumnMappings.Add("TelType", "TelType");
42                 //自定义的datatable和数据库的字段进行对应
43                 bulkCopy.WriteToServer(table);
44             }
45         }
46 
47         //一条一条的循环导入数据
48         private void btnImport_Click(object sender, RoutedEventArgs e)
49         {
50             OpenFileDialog ofd = new OpenFileDialog();
51             ofd.Filter = "文本文件|*.txt";
52             if (ofd.ShowDialog() == false)
53             {
54                 return;
55             }
56             string[] lines =
57                 File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
58             //跳过第一行表头
59             for (int i = 1; i < lines.Count(); i++)
60             {
61                 string line = lines[i];
62                 string[] strs = line.Split('\t');
63                 string startTelNum = strs[0];
64                 string city = strs[1];
65                 city = city.Trim('"');
66                 string telType = strs[2];
67                 telType = telType.Trim('"');
68 
69                 SqlHelper.ExecuteNonQuery("insert into T_TelNum(StartTelNum,TelType,TelArea) values(@StartTelNum,@TelType,@TelArea)",
70                     new SqlParameter("@StartTelNum", startTelNum),
71                     new SqlParameter("@TelType", telType),
72                     new SqlParameter("@TelArea", city));
73             }
74             MessageBox.Show("导入成功");
75         }
76  

 

posted @ 2013-04-10 17:36  李蒙  阅读(167)  评论(0编辑  收藏  举报