儲存過程批量處理資料的兩種方法
一:使用Bulk到資料庫輔助表
1.在資料庫建立一張輔助表(欄位為需要插入的欄位)
2.專案程式碼處理,並呼叫儲存過程
//專案程式碼
//建立表
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("欄位1",typeof(string)),
new DataColumn("欄位2",typeof(string)),
new DataColumn("欄位3",typeof(string)),
});
//將資料新增到資料庫輔助表
DataRow row = dt.NewRow();
row["欄位1"] = model.欄位1;
row["欄位2"] = model.欄位2;
row["欄位3"] = model.欄位3;
dt.Rows.Add(row);
}
dt.AcceptChanges();
//批量將值新增到資料庫輔助表表中
SQLHelper.BulkToDB(dt, "輔助表表名);
//呼叫儲存過程
SqlParameter[] parameters = {
new SqlParameter("",),
new SqlParameter("",};
int a;
SQLHelper.RunProcedure("儲存過程名", parameters, out a);
二:使用資料庫的使用者定義表型別
1.建立要傳的欄位放入表型別中
CREATE TYPE 表型別名TABLE(
欄位名1 欄位型別 NULL
欄位名2 欄位型別 NULL
欄位名3 欄位型別 NULL
)
GO
2.專案程式碼處理,並呼叫儲存過程
//專案程式碼
//建立裝置型別引數值記憶體表
DataTable MainData = new DataTable();
MainData.Columns.Add("欄位名1", typeof(string));
MainData.Columns.Add("欄位名2", typeof(string));
MainData.Columns.Add("欄位名3", typeof(string));
//將資料新增到資料庫表型別中
DataRow MainRow = null;
for (var i = 0; i < item.list.Count; i++) {
MainRow = MainParamData.NewRow();
MainRow ["欄位名1"] = item.list[i].欄位名1;
MainRow ["欄位名2"] = item.list[i].欄位名2;
MainRow ["欄位名3"] = item.list[i].欄位名3;
MainRow .Rows.Add(MainRow );
}
//呼叫儲存過程
SqlParameter[] parameters = {
new SqlParameter("@tbtemp",MainData ),//@tbtemp要與存儲存過程宣告表型別的名字一致
parameters[2].Direction = ParameterDirection.Output;
SQLHelper.RunProcedure("儲存過程名", parameters, "ds");
//儲存過程申明表型別名稱
CREATE PROCEDURE 儲存過程名
@tbtemp 使用者定義表型別名 READONLY,
AS