Типиз. Dataset и AutoIncrement
kulpavel
Дата: 07.04.2005 22:09:19
Добрый вечер!
Никак не получается забрать из базы данных MSSQL значение столбца идентити в столбец типизированного датасета, определяющего такую же таблицу что и на сервере (тоже с автоинкрементом), связанного с датагридом..
помогите..
sergei.knyazev
Дата: 08.04.2005 10:46:27
Если делать таблицу в dataset через функцию адаптера в дизайнере «Generate Dataset...» то никаких проблем не возникало у меня никогда. Вы создавали DataTable таблицу таким способом?
kulpavel
Дата: 08.04.2005 12:45:29
да именно в дизайнере создавал ...и датаадптеры и датасет..
в событии OnUpdatedRow (я посмотрел ) приходит новый ид (подставляется) ..но как занести этот ид в существующий row (который собственно заносим в бд)
Updds = ds.GetChanges();
da.Update(Updds );
ds.Merge(Updds );
ds.AcceptChanges();
ряд удваивается (что и следовало ожидать - ид то новый ), если не делать Merge() с новым ид(из базы) в датасет не попадает (что тоже правильно ((:)..
вот и вопрос как обновить ид ...
sergei.knyazev
Дата: 08.04.2005 14:27:32
По идее датасет может сам себе ставить всё что хочет, но при Insert в команде которую нагенерил адаптер не должно быть Id вообще, а в select который идёт после Insert into должен стоять в WHERE (Id = @@IDENTITY). Поэтому в датасет и заливается то что на самом деле думет сервак, а на домыслы датасета ему должно быть плевать.
kulpavel
Дата: 08.04.2005 14:34:29
все так и есть...
вопрос как обновить ид датасета значением ид из базы...
sergei.knyazev
Дата: 08.04.2005 16:00:12
Если Вы поставили галочку Refresh the DataSet при создании адаптера в Advanced Options... то всё должно само собой обновиться, потому что тогда метод Update() положит то что станет в базе обратно в строчку. Для этого сначала делается INSERT INTO, а потом SELECT.
kulpavel
Дата: 08.04.2005 16:27:42
да я поставил галочку..новый ид приходит..
при мерж эта строчка добавляется как новая, а не изменяется ид у существующей...
как сделать чтобы менялся ид у существующей ?
если не делать мерж ничего не добавляется и не изменяется..
sergei.knyazev
Дата: 08.04.2005 16:46:04
А что если просто сделать da.Update(ds)?
Sa
Дата: 09.04.2005 00:45:47
Используйте не результат
GetChanges(), а массив строк полученный при помощи метода
DataTable.SelectНапример:
...
System.Data.DataRow[] rows = myTypedDataSet.myDataTable.Select(null,null, DataViewRowState.Added);
if (rows.Length > 0) da.Update(rows);
...
|
uid = Sa
Sam Andrews
Дата: 09.04.2005 11:44:25
еще вариант: завести новое ключевое поле в датасете, инкремент...
в результате все апдейты будут по этому полю...
с уважением...