1. 程式人生 > >C#一次性向資料庫插入上萬條資料的方法

C#一次性向資料庫插入上萬條資料的方法

一次性插入上萬條資料的寫法

1.

  1. /// <summary> 
  2. /// DataTable批量新增(有事務) 
  3. /// </summary> /
  4. // <param name="Table">資料來源</param>
  5.  /// <param name="Mapping">定義資料來源和目標源列的關係集合</param> 
  6. /// <param name="DestinationTableName">目標表</param> 
  7. publicstaticbool MySqlBulkCopy(DataTable Table, SqlBulkCopyColumnMapping[] Mapping, 
    string DestinationTableName) {   
  8. bool Bool = true;   
  9. using (SqlConnection con = new SqlConnection(ConnectionString)) {   
  10. con.Open();   
  11. using (SqlTransaction Tran = con.BeginTransaction()) {  
  12.  using (SqlBulkCopy Copy = new SqlBulkCopy(con,SqlBulkCopyOptions.KeepIdentity,Tran)) {   
  13. Copy.DestinationTableName = DestinationTableName;//指定目標表 
  14. if (Mapping != null) { //如果有資料 
  15. foreach (SqlBulkCopyColumnMapping Map in Mapping) {   
  16. Copy.ColumnMappings.Add(Map); } }   
  17. try { Copy.WriteToServer(Table);//批量新增 
  18. Tran.Commit();//提交事務 } 
  19. catch { Tran.Rollback();  
  20. //回滾事務 Bool = false; } } } }
  21.  return Bool; }  

2.MSSQL使用SqlBulkCopy,傳資料來源,表名,列影射,我匯入150萬幾秒完成

  1. /// <summary>
  2.   /// 使用SqlBulkCopy批量插入,只限SQLServer
  3.   /// 缺點,沒有返回行數
  4.   /// </summary>
  5.   /// <param name="table">填充的DataTable,支援其它資料來源,請看過載</param>
  6.   /// <param name="tableName">資料庫對應表名</param>
  7.   /// <param name="columns">插入表對應的列名集合</param>
  8.   publicvoid SqlBulkCopyInsert(DataTable table, string tableName, string[] columns)  
  9.   {  
  10.   SqlBulkCopy sbc = new SqlBulkCopy("接連字串");  
  11.   sbc.DestinationTableName = tableName;  
  12.   foreach (string col in columns)  
  13.   {  
  14.   sbc.ColumnMappings.Add(col, col);  
  15.   }  
  16.   sbc.WriteToServer(table);  
  17.   }  


3.其它資料庫,將資料查到一個datatable,往table填充資料,再在adpt.Update(table)

  1. /// <summary>
  2.   /// 多行插入,Connection/Command/DataAdapter看你連線的資料庫型別
  3.   /// 進行相應的替換即可
  4.   /// </summary>
  5.   /// <param name="ds">填充資料後的資料集</param>
  6.   /// <returns>受影響行數</returns>
  7.   publicint MultyInsert(DataSet ds)  
  8.   {  
  9.   int result = 0;  
  10.   IDbConnection con = new OracleConnection("連線字串");  
  11.   con.Open();  
  12.   IDbCommand cmd = new OracleCommand();  
  13.   cmd.CommandText = "Insert into Member(UserName,Password) values(@name,@password)";  
  14.   IDbDataParameter namePar = cmd.CreateParameter();  
  15.   namePar.ParameterName = "@name";  
  16.   namePar.SourceColumn = "UserName";  
  17.   namePar.SourceVersion = DataRowVersion.Original;  
  18.   namePar.DbType = DbType.String;  
  19.   cmd.Parameters.Add(namePar);  
  20.   IDbDataParameter passPar = cmd.CreateParameter();  
  21.   passPar.ParameterName = "@pass";  
  22.   passPar.DbType = DbType.String;  
  23.   passPar.SourceColumn = "Password";  
  24.   passPar.SourceVersion = DataRowVersion.Original;  
  25.   cmd.Parameters.Add(passPar);  
  26.   IDbDataAdapter adpt = new OracleDataAdapter();  
  27.   adpt.InsertCommand = cmd;  
  28.   try
  29.   {  
  30.   result = adpt.Update(ds);  
  31.   }  
  32.   catch (Exception)  
  33.   {  
  34.   throw;  
  35.   }  
  36.   finally
  37.   {  
  38.   con.Close();  
  39.   }  
  40.   return result;  
  41.   }