數據庫批量插入Oracle中有 OracleBulkCopy,SQL當然也有個SqlBulkCopy .這里有介紹就不說,網上有非常詳細的例子,大家可去搜索下,可是MySql確沒有MySqlBulkCopy這個,網上找了很久也沒找到。找到了一個 MySqlBulkLoader
不廢話了,直接上代碼
#region 批量插入數據 ///// <summary> ///// 批量插入收集庫件級文書檔案信息實體(批量) ///// </summary> ///// <param name="dataTable">數據表</param> ///// <returns></returns> public int BulkInsert(DataTable table) { int insertCount = 0; try { table.TableName = "tb_jj_ws_collect";//數據庫中的表名 string connectionString = db.Database.Connection.ConnectionString; if (string.IsNullOrEmpty(table.TableName)) throw new Exception("請給DataTable的TableName屬性附上表名稱"); if (table.Rows.Count == 0) return 0; string tmpPath = Directory.GetCurrentDirectory() + "\\UpTemp"; if (!Directory.Exists(tmpPath)) Directory.CreateDirectory(tmpPath); tmpPath = Path.Combine(tmpPath, "Temp.csv");//csv文件臨時目錄 string csv = DataTableToCsv(table); File.WriteAllText(tmpPath, csv); var columns = table.Columns.Cast<DataColumn>().Select(_columns => _columns.ColumnName).ToList(); using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); conn.Open(); MySqlBulkLoader bulk = new MySqlBulkLoader(conn) { FieldTerminator = ",", FieldQuotationCharacter = '"', EscapeCharacter = '"', LineTerminator = "\r\n", FileName = tmpPath, NumberOfLinesToSkip = 0, TableName = table.TableName, }; bulk.Columns.AddRange(columns);//根據標題列對應插入 insertCount = bulk.Load(); stopwatch.Stop(); //Console.WriteLine("耗時:{0}", stopwatch.ElapsedMilliseconds); } catch (MySqlException ex) { throw ex; } } File.Delete(tmpPath); } catch (Exception ex) { OnLogError("批量插入收集庫件級文書檔案信息實體(批量)時異常。", ex); } return insertCount; } ///將DataTable轉換為標准的CSV /// </summary> /// <param name="table">數據表</param> /// <returns>返回標准的CSV</returns> private static string DataTableToCsv(DataTable table) { //以半角逗號(即,)作分隔符,列為空也要表達其存在。 //列內容如存在半角逗號(即,)則用半角引號(即"")將該字段值包含起來。 //列內容如存在半角引號(即")則應替換成半角雙引號("")轉義,並用半角引號(即"")將該字段值包含起來。 StringBuilder sb = new StringBuilder(); DataColumn colum; foreach (DataRow row in table.Rows) { for (int i = 0; i<table.Columns.Count; i++) { colum = table.Columns[i]; if (i != 0) sb.Append(","); if (colum.DataType == typeof(string) && row[colum].ToString().Contains(",")) { sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\""); } else sb.Append(row[colum].ToString()); } sb.AppendLine(); } return sb.ToString(); } #endregion
