0

当我在 Visual Studio 中创建表适配器时,我可以单击高级选项并选择这些选项...

在此处输入图像描述

也许我的假设是错误的,但以某种方式检索该标识列值对我来说是有意义的。我查看了表适配器的自动生成的 Insert() 函数,它返回的整数是 ExecuteNonQuery() 的结果,它是受影响的行。

有人可以解释这个复选框的用法吗?以及如何使用它来检索插入行的标识?

4

2 回答 2

0

首先,表需要数据库上的主键,否则不会生成更新命令,插入后DataTable不会刷新(如果键是由数据库生成的,例如自动增量)。

如果您没有主键并且想要检索 db 生成的值,请使用 OUTPUT 子句:

INSERT INTO tablename (columnnames ..) 
OUTPUT inserted.* 
VALUES (values...)

br

于 2013-03-06T09:56:52.703 回答
0

该系统旨在使用数据表,因此,如果您想添加单行,一种方法是

  1. 创建临时数据表,
  2. 使用该数据表的显式 AddRow 方法添加数据
  3. 使用表适配器更新新创建的数据表
  4. 返回表格第一行的 ID 字段。

第 3 步实际上进行了插入,然后在 SCOPE_IDENTITY() 上进行选择以刷新所有字段,包括“ID”列。

来自 WCF 的工作示例:

public string AddABCrecord(_ABCrecord ABC)
{
    bool isValid = (ABC.Activity != null) && (ABC.Behaviour != null) && (ABC.Consequence != null);

    DS.__ABCrecordDataTable dt = new DS.__ABCrecordDataTable();
    dt.Add__ABCrecordRow(ABC.Session, ABC.Section, ABC.Video, ABC.Ordinal,
        ABC.Name, ABC.Date, ABC.Time, ABC.Location, ABC.Activity,
        ABC.Antecedent, ABC.Behaviour, ABC.Consequence,
        isValid);

    try
    {
        new ta__ABCrecord().Update(dt);
        return dt[0].ID.ToString();
    }
    catch (Exception e)
    {
        return "Error Adding ABC record\r\n" + e.Message + ((e.InnerException == null) ? "" : Environment.NewLine + e.InnerException.Message);
    }
}
于 2017-11-07T01:22:10.603 回答