首页 > 技术文章 > OracleBulkCopy的批量数据导入

adolphyang 2015-07-23 15:00 原文

  1        private void button1_Click(object sender, EventArgs e)
  2         {
  3             OpenFileDialog afd = new OpenFileDialog();
  4             if (afd.ShowDialog()!=System.Windows.Forms.DialogResult.OK)
  5             {
  6                 return;
  7             }
  8             string fileName = afd.FileName;
  9             if (Path.GetExtension(fileName)!=".csv")
 10             {
 11                 MessageBox.Show("文件名后缀必须是.csv");
 12                 return;
 13             }
 14             DataTable table = new DataTable();
 15             using(Stream stream=new FileStream(fileName,FileMode.Open,FileAccess.Read))
 16             using(StreamReader sr=new StreamReader(stream,Encoding.Default))
 17             {
 18                 string firstline = sr.ReadLine();
 19                 string line;
 20                 
 21                 
 22                 #region 把创建的列加入表的列集合中
 23                 //Id
 24                 DataColumn column = new DataColumn();
 25                 column.ColumnName = "Id";
 26                 column.DataType = System.Type.GetType("System.Int32");
 27                 table.Columns.Add(column);
 28                 //MobileNumber
 29                 column = new DataColumn();
 30                 column.ColumnName = "MobileNumber";
 31                 column.DataType = System.Type.GetType("System.String");
 32                 column.MaxLength = 10;
 33                 table.Columns.Add(column);
 34                 //MobileArea
 35                 column = new DataColumn();
 36                 column.ColumnName = "MobileArea";
 37                 column.DataType = System.Type.GetType("System.String");
 38                 column.MaxLength = 30;
 39                 table.Columns.Add(column);
 40                 //MobileType
 41                 column = new DataColumn();
 42                 column.ColumnName = "MobileType";
 43                 column.DataType = System.Type.GetType("System.String");
 44                 column.MaxLength = 20;
 45                 table.Columns.Add(column);
 46                 //AreaCode
 47                 column = new DataColumn();
 48                 column.ColumnName = "AreaCode";
 49                 column.DataType = System.Type.GetType("System.String");
 50                 column.MaxLength = 10;
 51                 table.Columns.Add(column);
 52                 //PostCode
 53                 column = new DataColumn();
 54                 column.ColumnName = "PostCode";
 55                 column.DataType = System.Type.GetType("System.String");
 56                 column.MaxLength = 8;
 57                 table.Columns.Add(column); 
 58                 #endregion
 59                 
 60                 while ((line = sr.ReadLine())!=null)
 61                 {
 62                     string[] mobileMsg = line.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
 63                     int Id = Convert.ToInt32(mobileMsg[0]);
 64                     string MobileNumber = mobileMsg[1].Trim('"');
 65                     string MobileArea = mobileMsg[2].Trim('"');
 66                     string MobileType = mobileMsg[3].Trim('"');
 67                     string AreaCode = mobileMsg[4].Trim('"');
 68                     string PostCode = mobileMsg[5].Trim('"');
 69                     //创建行,把行加入表的行集合中
 70                     DataRow row = table.NewRow();
 71                     row["Id"] = Id;
 72                     row["MobileNumber"] = MobileNumber;
 73                     row["MobileArea"] = MobileArea;
 74                     row["MobileType"] = MobileType;
 75                     row["AreaCode"] = AreaCode;
 76                     row["PostCode"] = PostCode;
 77                     table.Rows.Add(row);
 78                 }
 79             }
 80 
 81             int i = table.Rows.Count;
 82             Stopwatch sw = new Stopwatch();
 83             sw.Start();
 84             using (OracleBulkCopy bulkCopy = new OracleBulkCopy(OracleHelper.CreateConnection()))
 85                 {
 86                     bulkCopy.DestinationTableName = "T_MOBILE";
 87                     foreach (DataColumn column in table.Columns)
 88                     {
 89                         bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);//源列名->目标列名
 90                     }
 91                     try //如果发生异常就回滚
 92                     {
 93                         bulkCopy.WriteToServer(table);//把table表写入数据库表中
 94                        // tx.Commit();
 95                     }
 96                     catch (Exception ex)
 97                     {
 98                       //  tx.Rollback();
 99                         throw new Exception(ex.Message);
100                     }
101                 }
102                 sw.Stop();
103                 MessageBox.Show("耗时:" + sw.ElapsedMilliseconds + "");
104            // }
105         }

 

推荐阅读