|
|
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
Привет. До этого я программировал клиентов на Delphi, а сейчас приходиться разбираться с ADO.NET, в частности с датасетом и датаадаптером, и мне многие его концепции непонятны: 1) Не могу найти аналога дельфийскому DataSet.Refresh (и RefreshSQL соттветственно). Т.е. мне надо перечитать одну конкретную запись из таблицы в объект DataTable. Как мне это сделать? 2) Как осуществляется вставка записей мне непонятно. Например у меня есть таблица с миллионом записей. Я один раз заполнил DataSet и вставил на клиенте 5 записей в эту таблицу. В это же время ещё несколько граждан вставили тоже по несколько записей и теперь мы свои изменения пытаемся влить в базу. Мне не понятно как адо разруливает создание уникальных ключей. Если АДО генерирует их сам, то как он обеспечивает уиникальность ключей у меня и у соседей. Если же ключи создаються на сервере, то как мне после вставки изменений узнать значения вставленных ключей ? 3) Возможно ли чтобы DataSet заполнялся по мере необходимости? В дельфи считывалось столько записей, сколько нужно для отображения в связанных с датасетом контролах. Если контролос нет, то при вызове DataSet.Open из базы считывается только одна запись. Таким образом если у меня есть таблица с 100 миллионами записей и она отображается в DBGrid, то по умолчанию на клиента будут грузиться не все 100 миллионов, а столько, сколько требует грид. Как это работает в адо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 19:50 |
|
||
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
авторне могу найти аналога ... 1. не ищи аналогов там, где их нет :) 2. полностью забудь опыт программирования с обычным ADO вообще и в Delphi в частности. для начала посмотри: ADO.NET for the ADO Programmer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2005, 20:08 |
|
||
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
Gold посмотри форум по 3 вопросу описывались по "листные запросы" - типа того не помню. и что тебе сдесь помешало считывать нужную информацию в DataSet? это дело простых запросов(для начала) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 13:24 |
|
||
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
Стр...2. полностью забудь опыт программирования с обычным ADO вообще и в Delphi в частности... Ну не полностью, но в целом поддерживаю. Касательно первого вопроса. Можно считать одну строку в отдельный датасет и затем сделать им Merge. Это будет похоже на Resync по эффекту :). Касательно второго вопроса - мне понравился один прикольный способ для master-detail датасетов, но и для однотабличных сойдет. В ключевой колонке назначается автоинкремент 0 и идет в минус. А при сохранении у адаптера вызывается команда на сохранение, которая может сделать селект сохраняемой строки после ее обновления (или вставки) уже со всеми ключами и т.п. Эта команда настраивается тобой-же, т.е. можно и хп замутить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 13:41 |
|
||
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
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 :-) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 14:29 |
|
||
|
Несколько вопросов по ADO.NET
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за ответы. По ходу дела оказалось что у нас люди DataSet вобще не используют. Считывают данные датаридером в свои классы и работают со своими классами. Тоже интересный способ, только вот привязку этик классов к контролам делать дольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2005, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=120&tid=1353803]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 318ms |

| 0 / 0 |
