Gold |
сейчас приходиться разбираться с ADO.NET, в частности с датасетом и датаадаптером, и мне многие его концепции непонятны
|
читайте литературу, постепенно сориентируетесь.
Gold |
1) Не могу найти аналога дельфийскому DataSet.Refresh (и RefreshSQL соттветственно). Т.е. мне надо перечитать одну конкретную запись из таблицы в объект DataTable. Как мне это сделать?
|
Одно из главных преимуществ DataSet состоит в том, что он не зависит от источника данных. Т.е. нет обратной связи
DataSet <->
Database, и нигде в DataSet вы не найдете сведений откуда были получены данные, либо из БД, либо из XML, либо сгенерированы вручную, таким образом не может быть и речи о существовании метода
Refresh в классе
DataSet.
Функциональность по обновлению данных реализуется разными способами вручную, варианты реализации можно посмотреть здесь на форуме и на форуме C#.
Gold |
2) Как осуществляется вставка записей мне непонятно. Например у меня есть таблица с миллионом записей. Я один раз заполнил DataSet и вставил на клиенте 5 записей в эту таблицу. В это же время ещё несколько граждан вставили тоже по несколько записей и теперь мы свои изменения пытаемся влить в базу. Мне не понятно как адо разруливает создание уникальных ключей. Если АДО генерирует их сам, то как он обеспечивает уиникальность ключей у меня и у соседей. Если же ключи создаються на сервере, то как мне после вставки изменений узнать значения вставленных ключей ?
|
Как вы запрограммируете так и будет эта ситуация разруливаться :-) ADO.NET здесь не принимает решений, в случае чего просто поймаете исключение.
Артем1 |
мне понравился один прикольный способ для master-detail датасетов, но и для однотабличных сойдет. В ключевой колонке назначается автоинкремент 0 и идет в минус.
|
Это рекомендуемая практика, когда, отсоединено от источника данных, идет генерация псевдоключей, а при вставке данных значения псевдоключей подменяются реальными данными, (автоинкремент может быть любым, в минус - обеспечивается "согласованность" с уже имеющимися ID)
Gold |
3) Возможно ли чтобы DataSet заполнялся по мере необходимости? В дельфи считывалось столько записей, сколько нужно для отображения в связанных с датасетом контролах. Если контролос нет, то при вызове DataSet.Open из базы считывается только одна запись. Таким образом если у меня есть таблица с 100 миллионами записей и она отображается в DBGrid, то по умолчанию на клиента будут грузиться не все 100 миллионов, а столько, сколько требует грид. Как это работает в адо?
|
Мое ИМХО, если 100 млн. записей в гриде - это ошибка проектирования, рядовой пользователь не сможет переварить столько. Если же и вызовется "доброволец", то реализуйте ему порционную загрузку данных.
P.S. у вас везде слово
ADO, а я говорю про
ADO.NET, так как форум у нас так называется
ADO.NET :-)
uid = Sa