最近要優化資料庫訪問,資料庫是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 使客戶端可...