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?

如何使用 phpmyadmin 向 mysql 数据库中的列添加自动增量?

火花数据框保存到带有自动增量列的 SQL 表

带有标识(自动增量)列的 BULK INSERT

将行数据转换为带键列的单列

自动增量在 MySQL 中停止了吗?