c#将行添加到具有自动增量列的数据表中
Posted
技术标签:
【中文标题】c#将行添加到具有自动增量列的数据表中【英文标题】:c# adding row to datatable which has an auto increment column 【发布时间】:2014-06-18 01:40:42 【问题描述】:我有一个数据表,包含 A、B、C 列。我已将 A 列的“是身份”属性设置为 true,但现在无法向表中添加任何行。
我正在尝试的代码是这样的:
dsA.dtA row = dsA.dtA.NewdtARow();
row.B = 1;
row.C = 2;
dsA.dtA.Rows.Add(row);
我收到 NoNullAllowedException,但我不明白为什么。 A列也是PK。如果我尝试设置 row.A = 5(或任何类似值),当我尝试更新数据表时会出现错误提示“当 identity_insert 设置为关闭时,无法在表中插入标识列的显式值”
我该如何解决这个问题?很郁闷。
【问题讨论】:
我已经回答过了,但是如果您可以在 dts.rows.add(row) 行上放一个断点并检查 row.A 是否携带,那就太好了。跨度> 您可能需要检查您的表的 IDENTITY_INSERT 是 ON 还是 OFF。 ColumnModel.IsIdentity (EF) 和 DataColumn.AutoIncrement (ADO Datatable) 是两个不同框架中的两个不同的东西。 IsIdentity 表示数据库将提供该值。 AutoIncrement 表示数据表对象将提供值。 【参考方案1】:这样做。参考link
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 1;
column.AutoIncrementStep = 1;
// Add the column to a new DataTable.
DataTable table = new DataTable("table");
table.Columns.Add(column);
DataRow oRow = table.NewRow();
table.Rows.Add(oRow);
【讨论】:
@John 也看到了这个help 但是,如果我已经拥有具有自动增量的现有列的数据表怎么办?我只是想在该表中添加一行,仅此而已。【参考方案2】:我的做法是
public void AppendtodtA(int num1, doubledouble1, string string1)
object[] RowArray = new object[] null,(int)num1, (double) doubledouble1, (string) string1
DataRow CurrentRow = dtA.NewRow();
CurrentRow.ItemArray = RowArray;
dtA.Rows.Add(CurrentRow);
使用ItemArray
属性并在自动增量列的位置留下null
AppendtodtA(MyNumber,MyDouble,MyString);
然后用你的变量调用方法。
【讨论】:
【参考方案3】:尝试以下两种方法之一:
设置字段值:
row.A = null;
row.B = 1;
row.C = 3;
将行添加到DataTable
:
dtA.Rows.Add(null,1,2);
它们都是相同的,只要尝试其中任何一个,它就会让你继续前进。还要记住,每当您想在 DataTable
中使列自动递增时,您必须在其中插入 null。
【讨论】:
两种方法都失败了。第一个甚至不会编译,说不能将 null 转换为 int。第二个只是像我自己的 NoNullAllowedException 方法一样失败。 DataTable dt = new DataTable(); dt.Columns.Add("A",System.Type.GetType("System.Int32")).AutoIncrement = true;dt.Columns.Add("B"); dt.Rows.Add(null, "abc"); dt.Rows.Add(null, "xyz");我检查了这个,它在视觉工作室中工作。【参考方案4】:打开数据集 xsd 文件的设计器,为现有列设置数据表中 A 列的 AutoIncrement、AutoIncrementSeed 和 AutoIncrementStep 属性。
【讨论】:
以上是关于c#将行添加到具有自动增量列的数据表中的主要内容,如果未能解决你的问题,请参考以下文章
由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?