我使用DataTable
和SqlBulkCopy
将数据插入SQL Server数据库表。
我已设法使用以下设置批量插入行,但仅使用负值,否则因为值不唯一而出现冲突:
DataTable table = new DataTable();
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 0;
column.AutoIncrementStep = -1;
table.Columns.Add(column);
table.Columns.Add(DB_Base.DBTable_Start, typeof(DateTime));
我有一个生成要插入的行的循环:
table.Rows.Add(null,tsoOptions.start);
然后我设置表和连接并使用WriteToServer()
方法写入数据。这一切都正常,行显示但负自动增量主键。
如何对其进行修改以使其附加一个正值的行,该值在最后一个(MAX)值之后继续,而不会在单独的查询中读取最大值?
答案 0 :(得分:4)
假设您的数据库表已正确创建且列自动增量(即IDENTITY
)已打开,请勿在代码中复制此功能。只需将记录发送到具有该列的null
值的数据库,数据库就可以完成其工作。注释掉这些行并尝试:
//column.AutoIncrement = true;
//column.AutoIncrementSeed = 0;
//column.AutoIncrementStep = -1;
<强>更新强> 实际上,最好的方法是不完全映射标识列,因此请注释掉所有这些行:
//DataColumn column = new DataColumn();
//column.DataType = System.Type.GetType("System.Int32");
//column.AutoIncrement = true;
//column.AutoIncrementSeed = 0;
//column.AutoIncrementStep = -1;
//table.Columns.Add(column);
//table.Columns.Add(DB_Base.DBTable_Start, typeof(DateTime));
并确保您没有使用SqlBulkCopyOptions.KeepIdentity
(check this)。
答案 1 :(得分:0)