Из хранимой процедуры в таблицу БД

Форум посвящён работе с базами данных в .NET.

Модератор: Ramzes

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Из хранимой процедуры в таблицу БД

Сообщение kroskros » 06.08.2006 (Вс) 18:41

Работаю в VB VS2005 и SQL Server 2000

Подскажите чего я не так делаю.
Есть таблица, в ней у каждой записи UID
на поле UID в БД установлен автоинкрименент.

Хранимой процедурой я забираю из БД строку по определенному UID.
Потом правлю ее, и хочу поместить обратно в БД модифицированную строку.

По ходу действия возникло следующее.
Хранимая процедура - простой селект с параметром (@UID)
она возвращает единственную строку. я забираю ее через адаптер
в датасет, правлю. Но через тот же адаптер обратно не могу загрузить,
поскольку UPDATE команда не создана автоматом для процедуры.

я поступил просто.
одним датаадаптером по UID вытягиваю данные ,
правлю, затем
создаю другой адаптер на таблицу, в которую сохраняю данные. Далее создаю строку
Dim row AS Datarow
row = датасет.таблица.NewRow()

в созданый ряд гружу иссправленую строку и делаю UPDATE датасета
в тихой надежде, что он, поскольку, UID совпадает с записью в таблице обновит соответствующую строку...
но ничего подобного. эта строка в БД получает новый UID, согласно шагу инкрименента.

Почему ТАК происходит я примерно понимаю.
а КАК мне надо поступить, кто-нибудь подскажет?
Max

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 07.08.2006 (Пн) 10:02

Ошибка в том, что в датасете создаешь новую строку. Поэтому при обновлении срабатывает команда Insert вместо Update, так как RowState этой строки в датасете находится в состоянии Added.
Совет:
Создай вручную команду Update и не мудри с новыми строками.
Или обновляй с помощью объекта Command.

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 07.08.2006 (Пн) 19:34

собственно я к тому и пришел...

вот токая пытался вручную установить состояние modified.
т.е. так: сперва делал acceptchanges
а затем установить modified и всеодно тот же эффект...
Max

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 08.08.2006 (Вт) 7:12

Насколько я понял, у тебя один Датасет и два адаптера, и один из них не имеет команду Update, а во втором есть, так?
Если так, не лучше ли будет перенести часть кода, связанный с командой Update со второго адапрета в первый?

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 08.08.2006 (Вт) 15:10

тогда, проще, исправить вручную UPDATE первому адаптеру так, чтобы он корректно обновлял нужную мне таблицу.. ))

лан...

Война окончена,
Всем спасиба! :)
Max

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 09.08.2006 (Ср) 7:13

тогда, проще, исправить вручную UPDATE первому адаптеру так, чтобы он корректно обновлял нужную мне таблицу.. ))

Именно это и хотел сказать! :)


Вернуться в ADO.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList