1. 程式人生 > >儲存過程批量處理資料的兩種方法

儲存過程批量處理資料的兩種方法

一:使用Bulk到資料庫輔助表

1.在資料庫建立一張輔助表(欄位為需要插入的欄位)

2.專案程式碼處理,並呼叫儲存過程

//專案程式碼

  //建立表

 DataTable dt = new DataTable();
 dt.Columns.AddRange(new DataColumn[] {
 new DataColumn("欄位1",typeof(string)),
 new DataColumn("欄位2",typeof(string)),
 new DataColumn("欄位3",typeof(string)),

  });

 //將資料新增到資料庫輔助表

 foreach (var model in 所有資料的集合{
  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