C# 使用SqlBulkCopy 複製數據到含自增列的表時的問題

問題

在批量導入.csv文件數據到數據庫表的時候,由於表包含了一列自增列,所以csv文件中則沒有添加這一列,所以在導入的時候遇到了插入失敗的問題。(其實沒問題,是程序報錯看錯了,白白搞了很久 TAT)

解決方案

一、設置映射

DataTable myDataTable = ioec.getDataTable(filePath, fileName);
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn);
sqlBulkCopy.DestinationTableName = mydataTable.TableName;
 for (int i = 0; i < dt.Columns.Count; i++)
    {
     sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
  	}
sqlBulkCopy.WriteToServer(myDataTable);

參數myDataTable不需要爲自增列新增一列,從csv導出什麼數據就是什麼數據
關鍵部分是:

 for (int i = 0; i < dt.Columns.Count; i++)
    {
     sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
  	}

這一段代碼,需要將數據源的列名和目標表的列名一一對應

二、爲參數datatable新增一列,值爲空

在datatable中加一列,數據爲空,位置是第一列,因爲填充的時候 會忽略第一列,這樣就不需要映射了,但是datatable列的順序必須和數據庫表列的順序一致!!否則會報錯

三、爲參數datatable新增一列,數據不爲空

在datatable中加一列,然後從數據庫表中查詢目前最後一個自增id的值,設置這一列的AutoIncrement、AutoIncrementSeed

DataTable myDataTable = new DataTable("mkexams");
DataColumn newDataColumn = myDataTable.Columns.Add("id", Type.GetType("System.Int64"));
newDataColumn.AutoIncrement = true; //設置這一列自增
newDataColumn.AllowDBNull = false;
List<mkexams> mk = dbContext.mkexams.ToList(); 
long id = mk.Last().id + 1;  //查出最後自增ID是多少
newDataColumn.AutoIncrementSeed = id; //啓始值
newDataColumn.AutoIncrementStep = 1;  //每次增長數

其中myDataTable的這一列自增列的數值只需要設置爲null即可。例如:

myDataTable.Rows.Add(null, "第一行第二列數據", "第一行第三列數據");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章