【问题标题】:c# adding row to datatable which has an auto increment columnc#将行添加到具有自动增量列的数据表中
【发布时间】: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 表示数据表对象将提供值。

标签: c# datatable auto-increment


【解决方案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】:

    尝试以下两种方法之一:

    1. 设置字段值:

      row.A = null;
      row.B = 1;
      row.C = 3;
      
    2. 将行添加到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 属性。

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2015-06-05
      • 2019-01-18
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多