![]() |
|
Модераторы: gambit |
![]()
|
|
| Enuviel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Извиняюсь, возможно, за столь тривиальный вопрос, но с ADO.NET сталкиваюсь впервые...каша в голове...
Заполняю DataSet пустой базой данных(беру с сервера). Далее программно заливаю в этот датасет данные из xml(Не используя ReadXML. для добавления строк юзаю table.LoadDataRow(row.ItemArray, true);). ДатаСет изменяется, а вот как передать это все в базу данных никак не могу понять:(( dataAdapter.Update(dataSet1)- не чего не делает..хотя это наверное и понятно никаких делит, инсерт апдейт комманд я ему не задавала, так и не смогла понять как это лучше сделать. так как таблицы связаны...CommandBuilder не подходит я так понимаю. Попутный вопрос. У меня есть 10- таблиц в базе данных. Я их все засовываю в датасет, и дальше работаю уже с ним. Вопрос:датаадаптер должен быть один?или для каждой таблице свой, так как мне придется вставлять,изменять, удалять данные из каждой таблицы? |
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Приветствую на форуме.
Код в студию. И некоторые пояснения про структуру таблиц и как получили в ДатаСет таблицы из БД.
В принципе можно использовать и один ДатаАдаптер. И все операции с таблицами провидить через обьект команд. А можно и для каждой таблицы создать свой ДатаАдаптер и работать через них. ЗЫ а на каком языке пишем? -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| Enuviel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Пишу на С#.
Датасет заполняю тупо всем что есть в базе данных(так как еще нужен будет экспорт и необходимо отображать все взаимосвязанные изменения без подключения к базе). Далее планирую данные выбирать из датасета запросами и потом уже их выводить на ДатаГридВьюв. Получаю данные с сервака так
далее есть определенная структура хмл откуда получаю данные и заливаю в датасет....ниже код
раньше здесь table.LoadDataRow(row.ItemArray, false); было труе...изменила на фалзе..что бы RowState был правильный(Added) Теперь я как я понимаю надо прописать insertCommand? . Добавлено через 4 минуты и 57 секунд к выше сказанному..на данный момент используется SQLClient... |
||||
|
|||||
| thomas |
|
||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Вот с таким
еще не сталкивался. Я бы делал это с одним ДатаАдаптером но для каждой таблицы отдельно. Примерно так
А можно для каждой таблицы делать свой ДатаАдаптер и через него создавать таблицу в ДатаСет и заполнять данными. Потом его же использовать для delete, insert и update базы данных на сервере. И тут полезно воспользоваться
И не плохо бы вам полазить по этому сайту. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||
|
|||||||
| Enuviel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Вот то самое с чем не сталкивались..просто реализация для любой базы, скажем так что бы не работать с ОлеДБ..т е при MSSQL SqlClient Oracle OracleClient а при все остальном соответственно OleDb.
Расскажите а есть разница между тем что бы сразу добавить все одним огромным селектом в датасет и по отдельности? в моем случае я могу потом ренейм сделать всех таблиц и все. SqlCommandBuilder использовать не получится..так как у него нет общего интерфейса с остальными клиентами..А приложение будет работать со всеми и как бы не хотелось делать сильное разветвление... |
|||
|
||||
| thomas |
|
||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Приветствую.
DbTools у вас свой отдельный класс?
Честно не знаю. Один большой select что-то новое, для меня. На мой взгляд, если по отдельности, то каждая таблица получит своё имя в ДатаСет, а не только индекс по умолчанию. Далее в коде программы обращения к таблицам дата сет будут выглядеть нагляднее и понятнее. При большом селекте таблицы получают только индекс. И какой индекс подразумевает какую таблицу вы понятия не имеете.
этот обьектсоздается для конкретного ДатаАдаптера, в свою очереь который был создан для конкретного провайдера. Если ваше приложение должно рабоать с разными типами баз данных, то для каждого типа вы как минимум должны задать провайдера данных и для него создать обьект ДатаАдаптер и уже для него CommandBuilder. Вот такие мысли. Добавлено через 4 минуты и 17 секунд Как отправную точку в чтении документации могу посоветовать эту. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||
|
|||||||
| Enuviel |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Именно это и хочу сказать
Да это отдельный класс, который создает в зависимости от прешедших значений(выбрана для работы МССКУЛь, Оракле) нужного провайдера..
Большой селект..называется пакетным запросом SQL, но как выяснилось клиент .NET Oracle с ним работать не умеет. Пришлось уйти к 10 датаАдаптарам.
делаешь что то типа
перед датаАдаптер.Филл и получаешь то что нужно!
Ага, уже нашла что есть для всех провайдеров Но у меня не все таблицы для него подходят, так что ручками тоже придется пописать! В общем thomas все равно спасибо! А читать лучше книжки, а потом уже только МСДН! |
||||||||||||
|
|||||||||||||
| thomas |
|
||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Приветствую. Тут я имел в виду несколько другое
Имя таблицы я указываю как параметр метода Fill ДатаАдаптера. См. мой второй пост в этой теме.
А поподробнее можно рассказать о задачах и области применения приложения, создаваемого вами. С наилучшими пожеланиями. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||
|
|||||||
| Enuviel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
С адаптерами разобралась...Вроде как работает.
Есть конретная структура базы данных. Приложение будет уметь создавать базу, импортить, экспортить, ну и основное действия(удаление,изменение, вставка строк,фильтры). Оно нужно только для удобства работы с базами ну и получения хмлек. Попутный вопрос. Вот имеется в наличии ДАтасет полная копия БД со всеми релайшенами. Все бы хорошо..но теперь мне надо на датаГрид выводить три таблицы которые являются запросами по всему датасету(к дататейблу вроде как можно делать запрос). Зачем я беру полную копию:необходимо что бы без подключения к базе происходили изменения во всех связанных таблицах, а так как запрос не затрагивает поля с внешними ключами...решила брать весь, и как то надо теперь тянуть данные оттуда на датагрид. Что бы при изменение все изменялось в автономном режиме. А при нажатии кнопки апдейт..вносить изменения на сервер. Как это сделать пока не знаю.. Можно вроде как выводить все дочерние строки..а если учесть что запрос у меня километровый...то наверное не совсем удобный вариант.. Как бы датасет привратить в источник данных к примеру для Второго Датасета. Второй датасет будет доступен для редактирования и при всех изменениях будем изменять первый датасет. А при апдейте будем апдейтить тока на сервер первый датасет. Может кто делал что то подобное? |
|||
|
||||
| thomas |
|
||||||||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Несколько замечаний к тому что вы написали.
Значит ли это, что вы создали программно связи таблиц в ДатаСет?
вроде как не предусмотрено вообще.
Теперь далее. Если вы хотите в контролах отображать данные из связанных таблиц (данные из одной таблицы в текст боксах, а связанные с ними данные из другой таблицы в датагриде) и при перемещении по записям в одной должны происходить изменения отображения в другой, то для этого нужно использовать обьект(ы) BindingSource(BindingNavigator). Он позволяет вносить изменения в обе таблицы. А идея с двумя ДС не правильна. Добавлено через 7 минут и 42 секунды
Советую в книгах, а потом в msdn еще раз прочитать про ДатаСет и его содержимое. Что, как и с чем взаимодействует. Это сообщение отредактировал(а) thomas - 8.11.2007, 14:49 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||||||||
|
|||||||||||
| Enuviel |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Да.
Я имела ввиду что то типа этого dataset.tables[0].select();
Кроме этой таблицы я еще буду передавать 7 из которых берется значение, т е при изменении в этой таблице, без подключения к БД я не получу изменения в других 7 таблицах и обратно. А это мне нужно получить.
...просто есть главное мди окно, у него 10 дочерних с таблицами...Вот в первом произошло изменение хочу что бы открыли связанную с ним таблицу и там тоже было изменение...вот.. а про биндингСоурс еще не дочитала..
Мэй би..мэй би..я же не гуро хотя эта идея наверное имеет смысл. Добавлено через 1 минуту и 4 секунды
уже просто обчиталася |
||||||||||||
|
|||||||||||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Enuviel,
Я вот тоже сижу читаю, хотя своих дел по горло. А все
Сейчас придумаем. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |