C#中有時候需要將內存中的數據批量插入到數據庫表中,使用for循環進行批量插入不但耗時而且會頻繁操作數據庫。 針對數據量很少的可以使用for循環插入,但是針對於數據量大的則不推薦使用for循環插入,推薦使用sql的塊處理插入。 塊處理不但耗時少而且不會頻繁對數據庫進行操作,只是需要注意的一點是DataTable中的列必須與表的列完全一致。 如下代碼是批量插入的一個函數,自測可用。
#region 使用SqlBulkCopy將DataTable中的數據批量插入數據庫中 /// <summary> /// 注意:DataTable中的列需要與數據庫表中的列完全一致。 /// 已自測可用。 /// </summary> /// <param name="conStr">數據庫連接串</param> /// <param name="strTableName">數據庫中對應的表名</param> /// <param name="dtData">數據集</param> public static void SqlBulkCopyInsert(string conStr, string strTableName, DataTable dtData) { try { using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(conStr))//引用SqlBulkCopy { sqlRevdBulkCopy.DestinationTableName = strTableName;//數據庫中對應的表名 sqlRevdBulkCopy.NotifyAfter = dtData.Rows.Count;//有幾行數據 sqlRevdBulkCopy.WriteToServer(dtData);//數據導入數據庫 sqlRevdBulkCopy.Close();//關閉連接 } } catch (Exception ex) { throw (ex); } } #endregion
#region 使用SqlBulkCopy將DataTable中的數據批量插入數據庫中 /// <summary> /// 注意:DataTable中的列需要與數據庫表中的列完全一致。 /// 已自測可用。 /// </summary> /// <param name="conStr">數據庫連接串</param> /// <param name="strTableName">數據庫中對應的表名</param> /// <param name="dtData">數據集</param> public static void SqlBulkCopyInsert(string conStr, string strTableName, DataTable dtData) { try { using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(conStr))//引用SqlBulkCopy { sqlRevdBulkCopy.DestinationTableName = strTableName;//數據庫中對應的表名 sqlRevdBulkCopy.NotifyAfter = dtData.Rows.Count;//有幾行數據 sqlRevdBulkCopy.WriteToServer(dtData);//數據導入數據庫 sqlRevdBulkCopy.Close();//關閉連接 } } catch (Exception ex) { throw (ex); } } #endregion
