Получить идентификатор области из сгенерированного TableAdapter

Когда я создаю адаптер таблицы в Visual Studio, я могу щелкнуть дополнительные параметры и выбрать эти параметры...

введите здесь описание изображения

Возможно, мое предположение неверно, но мне было бы разумно каким-то образом получить значение этого столбца идентификаторов. Я посмотрел на автоматически сгенерированную функцию Insert() для адаптера таблицы, и целое число, которое она возвращает, является результатом ExecuteNonQuery(), который затрагивает строки.

Может ли кто-нибудь объяснить использование этого флажка? И как я могу использовать его для получения идентификатора вставленной строки?


person Theo    schedule 06.08.2012    source источник


Ответы (2)


Система предназначена для работы с данными, поэтому, если вы хотите добавить одну строку, один из методов -

  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);
    }
}
person Andrew Malcolm    schedule 07.11.2017

Прежде всего, таблице нужен первичный ключ в базе данных, в противном случае команды обновления не генерируются, а DataTable не обновляется после вставки (если ключ генерируется базой данных, например, автоинкремент).

Если у вас нет первичного ключа и вы хотите получить значения, сгенерированные базой данных, используйте предложение OUTPUT:

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

br

person user731032    schedule 06.03.2013