|
Работа с DataSet
|
|||
---|---|---|---|
#18+
DataSet набран вручную. Тип данных в ds.Table(0) соответствует типу в Базе данных (таблица q1). Есть ли способ выгрузить данные из DataSet в базу данных (одну или несколько таблиц). Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2004, 20:22 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Один из способов: "Пробежаться" по интересующимся записям и передать их в БД ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2004, 10:28 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Может есть способ скинуть весь датасет? Если "пробегаться" по всем записям, то при передачи записи в БД для каждой отдельно нужно генерить commandString или можно обойти столь неприятное занятие? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2004, 11:09 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
>Может есть способ скинуть весь датасет? >Если "пробегаться" по всем записям, то при передачи записи в БД для каждой отдельно нужно генерить commandString или можно обойти столь неприятное занятие? Вместо commandString вы наверное имели ввиду CommandText. Ну CommandText может быть один и тот же, а вот параметры естественно для каждой строки надо будет менять. DataSet можно скинуть через метод Update класса DataAdapter но тут тоже придется экземпляр этого класса докручивать, как именно? - вы примерно можете посмотреть сгенерировав DataAdapter для вашей таблицы мастером в VS.Net. Не зная: Для чего вы создаете DataSet с нуля, если есть идентичная таблица (или несколько таблиц) в БД? С какой БД, вы работаете? Используете ли хранимые процедуры ? Структура данных? Названия полей и таблиц? И т.д. Трудно посоветовать что либо еще кроме как "вручную". Я лично предпочитаю работать вручную (ну это лишь потому что в основном я не использую DataAdapter для внесения изменений в БД) Плюс способа "вручную" состоит в том что вы полностью контролируете процесс и вносите изменения так как вам необходимо, при этом структуры могут совсем не совпадать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2004, 12:56 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Работаю с БД Access. При попытке сделать всё как в хэлпе описано получаю результат "ничего" . вроде всё правильно. К полученному датасету (custDS) добавляется myDataSet (здесь всё нормально проверяю в датаГриде), а вот когда пытаюсь обновить myAdapter.Update(custDS), то получаю результат = 0. Не знаю как с этим бороться. Вот код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2004, 17:21 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Кстати myDataSet набираю из копии таблицы куда хочу загрузить обновленный DataSet. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2004, 17:23 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Для начала перед Update проверьте custDS.HasChanges Затем привидите значение commandString. И посмотреть какие commandы сгенерировал OleDbCommandBuilder. Не лишним будет и структура таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2004, 07:24 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
при проверке custDS.HasChanges = False Хотя в гриде custDS обновляется. commandString="SELECT * FROM q1" берем одну запись. В myDataSet commandString="SELECT * FROM q WHERE dateReg=10/05/04" выбирает две записи. В гриде получается три. Странно почему custDS.HasChanges = False. Как посмотреть какие commandы сгенерировал OleDbCommandBuilder не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2004, 21:36 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Возможное решение: Пусть daMyDataSet - экземпляр класса DataAdapter наполняющий myDataSet данными, тогда перед вызовом метода Fill добавьте: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2004, 07:39 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
После пременения AcceptChangesDuringFill = False происходит загрузка в таблицу q1 новых строк. Только одно но происходит загрузка строк из тойже таблицы q1. Как будто мы используем не custDS.Merge(myDataSet) а custDS.Merge(custDS). Вот такая вот странность. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2004, 14:12 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
По подробнее проблему опишите, строки что ли дублируются? Что возвращает HasChanges для обоих DataSet до Merge. Что возвращает custDS.HasChanges после Merge. Привидите код заполнения myDataSet. Привидите структуру таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2004, 14:29 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
C AcceptChangesDuringFill все понятно. Ведь данное свойство отвечает принимать ли за изменения заполнение экзэмпляра класса DataSet. Соответственно при загрузке записей ун считает, что происходит обновление и при сохранении в БД просто происходит удваивание записей. По моему так. Проблема в том, что после Merge custDS.HasChanges = False Код заполнения myDataSet Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Структура таблицы: q fieldID - счетчик fieldText - текстовое поле Структура таблицы: q1 fieldID - счетчик fieldText - текстовое поле О! Пока писал данное сообщение решил попробовать подругому теперь custDS.Merge(myDataSet) custDS.HasChanges = False Но если смотреть DataGrid заполняемый из custDS то изменения видно. В общем сейчас перешлю исходник. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2004, 19:25 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
>C AcceptChangesDuringFill все понятно. Да но вы не туда пытались вставить AcceptChangesDuringFill. Его надо использовать (custDS.Merge(myDataSet)) не применительно к адаптеру заполняющий custDS а применительно к адаптеру заполняющему myDataSet - так как именно myDataSet является источником тех данных которые необходимо добавить. То есть вставлять надо было вот в эту процедуру. VB.NET Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Теперь все загружаемые данные myDataset(generatedDataSet) будут через Merge попадать в custDS и через Update добавляться уже в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2004, 08:20 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Блин СУПЕР! .NET хорошая штука только разобраться нужно. Я уже даже во сне проблему решал. Огромное СПАСИБО!!! Есть ещё одна просьба объяснить как работает AcceptChangesDuringFill. Премного Благодарен ещё раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2004, 08:47 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
В смысле AcceptChanges During Fill текущий датасет, правильно. Каким образом AcceptChangesDuringFill = False влияет на добавление myDataSet в custDS? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2004, 08:50 |
|
Работа с DataSet
|
|||
---|---|---|---|
#18+
Кратко: AcceptChangesDuringFill - вольно перевести можно как "ПринятьИзмененияВТеченииПроцессаЗаполнения" По умолчанию у DataAdapterа AcceptChangesDuringFill = True. В этом случае при заполнении DataSet'а устанавливается("ПринимаютсяИзменения") их RowState в Unchanged (обычный AcceptChanges() для отдельной строки) . При merge RowState=Unchanged сохраняется по этому и был эффект записи слились в один DataSet а в БД не попали. Update игнорирует строки Unchanged. Когда AcceptChangesDuringFill = False то при заполнении DataSet у строк RowState не сбрасывается -> RowState=Added при Merge RowState=Added сохраняется, и метод Update экземпляра класса DataAdapter такие строки отрабатывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2004, 10:51 |
|
|
start [/forum/topic.php?fid=17&msg=32512176&tid=1354125]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 157ms |
0 / 0 |