2011-01-23 1 views
4

Когда я выполнить вставку с TableAdapter:Некорректного ID возвращается после вставки с помощью TableAdapter

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

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

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

+0

Пожалуйста, переформатируйте свой вопрос, чтобы задать вопрос и сделать его читаемым. –

+0

Это все еще не вопрос. –

+0

Это вопросы сейчас :) – SMUsamaShah

ответ

10

установить свойство режима выполнения на Скаляр, then you get the ID, в противном случае пострадали строки. Вы устанавливаете окно свойств свойств запроса не в мастере запросов.

alt text

(рис 28)

+0

Я не видел его поначалу, ваша ссылка очень полезна, спасибо ... – SMUsamaShah

+0

Он работает правильно :) – SMUsamaShah

+1

Имейте в виду, что (как указано в статье) вам все равно нужно изменить запрос insert, чтобы он вернуть запрашиваемое удостоверение личности. –

7

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

+0

так как решить эту проблему? – SMUsamaShah

+0

На самом деле это не проблема, это по дизайну :-) – tomfanning

+0

Должен быть круг для этой «функции» – SMUsamaShah

1

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

reply to this post имеет ответ.

select @@pid 

От того же открытого соединения должно это сделать.

+0

pid is PurchaseId с автоинкрементной стоимостью – SMUsamaShah

+0

Обсуждение круговой природы жизни; Я написал тот ответ. – casperOne

1

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

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

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

SELECT SCOPE_IDENTITY(); 

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

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

правой кнопкой мыши на адаптере таблицы и выберите Add Query из контекстного меню. Появится мастер настройки запроса на использование таблицы:

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

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

  • Введите соответствующее имя для метода, например.InsertXYZ

3) Ваш код:

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

Смежные вопросы