Неверный идентификатор возвращается после вставки с помощью TableAdapter - PullRequest
6 голосов
/ 24 января 2011

Когда я выполняю вставку с TableAdapter:

int pid = this.purchaseTableAdapter.Insert(supplierid, datetime, "", 
    totalprice, amountpaid);

Возвращается неверный идентификатор 1, а должен возвращаться 15.

Какполучить правильный идентификатор?

Ответы [ 5 ]

11 голосов
/ 24 января 2011

установите для свойства режима выполнения значение Scalar , , затем вы получите идентификатор , в противном случае строки будут затронуты.Вы задаете окно свойств свойства запроса не в мастере запросов.

alt text

(рис. 28)

7 голосов
/ 24 января 2011

Адаптер таблицы возвращает количество затронутых строк, а не идентификатор.

1 голос
/ 26 мая 2013

1) Хранимая процедура:

Тело вашей хранимой процедуры должно быть примерно таким:

INSERT INTO MyTable (C1, C2, C3) VALUES (@c1, @c2, @c3);

SELECT SCOPE_IDENTITY();

Важной частью здесь является использование SELECT SCOPE_IDENTITY (), а не RETURN SCOPE_IDENTITY ().Редактировать: использование RETURN будет работать, если вы вызываете функцию вместо хранимой процедуры.

2) Адаптер таблицы:

Щелкните правой кнопкой мыши на адаптере таблицы и выберитеДобавить запрос из контекстного меню.Всплывающее окно «Мастер настройки запросов адаптера таблицы»:

  • Выберите тип команды: выберите «Использовать существующую хранимую процедуру».

  • Выберите формуданные, возвращаемые SP: выберите «Одно значение».

  • Введите подходящее имя для метода, например, InsertXYZ

3) Ваш код:

Теперь, когда вы вызываете метод InsertXYZ на вашем настольном адаптере, он вернет объект, который вы можете привести к Int32.,Это значение является идентификатором новой записи!

1 голос
/ 24 января 2011

Я предполагаю, что у вас есть столбец pid с автоматически сгенерированным значением.

Ответ на это сообщение содержит ответ.

select @@pid 

Изто же самое открытое соединение должно сделать это.

0 голосов
/ 24 января 2011

Как насчет этого сообщения Вставка ASP.NET для табличного адаптера не возвращает правильное значение идентификатора

Я действительно не знаю c #, но функция может возвращать число затронутых строк, или логическое 1 для true или 0 для false?

...