如何往資料庫中快速匯入資料

2021-09-30 19:22:19 字數 1363 閱讀 8523

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。

示例**如下:

/// /// 批量匯入

///

///

///

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)

}}

使用事務和sqlbulkcopy批量插入資料

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...