天译翻译C#使⽤SqlBulkCopy复制数据到含⾃增列的表时的问题
问题
在批量导⼊.csv⽂件数据到数据库表的时候,由于表包含了⼀列⾃增列,csv⽂件中没有添加这⼀列,所以在导⼊的时候遇到了插⼊失败的问题。(其实没问题,是程序报错看错了,⽩⽩搞了很久 TAT)
解决⽅案
金融数学专业
⼀、设置映射
DataTable myDataTable = DataTable(filePath, fileName);
blou什么意思
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++)
mna{
sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
}
这⼀段代码,需要将数据源的列名和⽬标表的列名⼀⼀对应
⼆、为参数datatable新增⼀列,值为空crazy
learnenglish在datatable中加⼀列,数据为空,位置是第⼀列,因为填充的时候 会忽略第⼀列,这样就不需要映射了,但是datatable列的顺序必须和数据库表列的顺序⼀致!!否则会报错
三、为参数datatable新增⼀列,数据不为空
在datatable中加⼀列,然后从数据库表中查询⽬前最后⼀个⾃增id的值,设置这⼀列的AutoIncrement、AutoIncrementSeed
DataTable myDataTable =new DataTable("mkexams");
convenient的用法DataColumn newDataColumn = myDataTable.Columns.Add("id", Type.GetType("System.Int64"));
一八联合国际学校newDataColumn.AutoIncrement =true;//设置这⼀列⾃增
newDataColumn.AllowDBNull =fal;
List<mkexams> mk = dbContext.mkexams.ToList();
long id = mk.Last().id +1;//查出最后⾃增ID是多少
newDataColumn.AutoIncrementSeed = id;//启始值
newDataColumn.AutoIncrementStep =1;//每次增长数
其中myDataTable的这⼀列⾃增列的数值只需要设置为null即可。例如:
insurgentmyDataTable.Rows.Add(null,"第⼀⾏第⼆列数据","第⼀⾏第三列数据");