批量插入資料 SqlBulkCopy類

2021-06-23 03:14:47 字數 1199 閱讀 2414

最近要優化資料庫訪問,資料庫是sqlserver。

對單條資料的插入和更新,之前的做法是先查詢資料庫是否有記錄,有就更新,沒有就插入。

查了網上的資料後,別人有個好的做法是直接update,若受影響條數是0就直接插入。不知道有沒有更好的。

對與操作歷史表的請求,準備做成批量插入。通過使用sqlbulkcopy來批量插入。因為採用了orm所以批量插入的時候要轉model為datatable。所以根據model寫了個modeltodatatable的方法來生成datatable物件。

public static datatable converttodatatable(listmodels,string tablename)}}

dt.rows.add(dr);

}return dt;

}else

return null;

}private static void gettablecolumn(datatable dt, t model)

}}

之前對sqlbulkcopy不了解,對應的資料庫表主鍵是自增列,同時還有image型別,在寫**的時候遇到一些問題,現在把sqlbulkcopy的測試例子貼出來,希望對同樣的新人有幫助。

static void main(string args)

};object row1 = };

dt.rows.add(row);

dt.rows.add(row1);

using (sqlbulkcopy sbc = new sqlbulkcopy(conn))

}

在sqlbulkcopy中只要把model的屬性名和資料庫的欄位名對映好就行,別漏掉了乙個,否則就會報錯。

對應的資料庫表資訊:

create table [dbo].[person](

[id] [int] identity(1,1) not null,

[name] [nchar](10) null,

[address] [nchar](10) null,

[phonenum] [int] null,

[qq] [nchar](10) null,

[picture] [image] null

) on [primary] textimage_on [primary]

批量插入資料

drop procedure if exists pre 如果存在先刪除 delimiter 以delimiter來標記用 表示儲存過程結束 create procedure pre 建立pre 儲存方法 begin declare i int default 12 declare n int de...

JDBC批量插入資料

一.直接上源 以匯入課表資料為例 批量插入新申請 匯入預設課表 throws sqlexception catch sqlexception e int number ps.executebatch 把剩餘的資料插入 conn.commit 手動提交事務 try catch sqlexception...

TVP批量插入資料

錶值引數具有更高的靈活性,在某些情況下,可比臨時表或其他傳遞引數列表的方法提供更好的效能。錶值引數具有以下優勢 1 首次從客戶端填充資料時,不獲取鎖。2 提供簡單的程式設計模型。3 允許在單個例程中包括複雜的業務邏輯。4 減少到伺服器的往返。5 可以具有不同基數的表結構。6 是強型別。7 使客戶端可...