sqlbulkcopy是.net的乙個類常用於批量插入資料,這種方式比insert方式效能要高許多。
需要注意的是,datatable中的列需要與即將插入的表的列相容,名稱和資料庫的順序完全一致。樓主往日期型別插入空值時就遇到了乙個問題,那就是不能給這一列的設定null值,而是要通過不給其賦值的方式。datatable的表名要與資料庫的表名一致。
插入資料時,有個sqlbulkcopyoptions可以設定,它可以更改sqlbulkcopy的行為,它是列舉型別,它的值如下所示:
字段解釋
default
使用所有選項的預設值
keepidentity
保留源標識值。
未指定標識值時,該值由目標指派。這個很好理解,比如將
a表中的資料批量匯入到
b表中,
b表的標識列
id依舊套用a表的
id時就需要這個。
checkconstraints
插入資料時檢查約束。
預設情況下,不檢查約束。當資料是從外部匯入時就需要檢查約束
tablelock
獲取批量複製操作持續時間的批量更新鎖定。
如果未指定,則使用行鎖定。
keepnulls
在目標表中保留 null 值,而不考慮預設值的設定。 如果未指定,由預設值替換 null 值(適用時)。假如a表中的salary為null,b表中的salary的預設值為0,那麼a表匯入b表後salary的值會變成0。
firetriggers
如果指定,則使伺服器激發插入觸發器,從而使行插入資料庫。
useinternaltransaction
如果指定,批量複製操作的每一批都將在事務內發生。如果指示該選項,並且還向建構函式提供sqltransaction
物件,則發生
argumentexception。
示例**如下:
使用事務和sqlbulkcopy批量插入資料/// /// 批量匯入
///
///
///
public static bool executenonquery(datatable dt)
sqlbulkcopy.writetoserver(dt); // 將datatable資料上傳到資料表中
tran.commit();
return true;
}catch (exception e)
tran.rollback();
return false;
}finally
if(sqlbulkcopy != null)
}}
sqlbulkcopyoptions enum
往資料庫中插入資料
private materialenterstore entitymes 入庫表 private materialenterdetail entitymed 入庫明細表 transactionmanager tran datarepository.provider.createtransaction...
C DataTable 快速匯入資料庫
摘自 using system using system.collections.generic using system.linq using system.text using system.data using system.data.sqlclient using system.config...
如何快速在資料庫中插入資料
工作中很少用mysql插入資料,今天正好遇到,學習下 在toad mysql工具裡面,除了像execl 一樣手動插入資料之外,最好用insert語句插入資料,怎麼快速生成資料呢?1.右擊需要插入資料表,這裡是cd financing income,彈出generate sql 選擇to editor...