![]() |
|
Модераторы: gambit |
![]()
|
|
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: нет Всего: 18 |
Хотел бы узнать как лучше всего сделать импорт данных из локальной DataTable (или DataSet) в базу.
Структура базы: ID (decimal, pk), NAME (string), другие поля. Есть файл xml, в который записана DataTable через DataTable.WriteXml. Для импорта читаю из файла DataTable как DataTable.ReadXml, затем нужно эти данные импортировать в базу (т.е. если в базе нет ID - должна добавляться новая строка, если ID есть - обновляться поля строки с этим ID). Это сообщение отредактировал(а) Voyager - 24.10.2007, 22:19 |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
а юзать DataTable.PrimaryKey Property не получается?
ИМХО нужно после считывания таблицы из БД посмотреть есть ли у нее PrimaryKey. Если нет - добавить (пример с msdn по "DataTable.PrimaryKey Property") -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: нет Всего: 18 |
А причем тут это?
|
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
Как это причем?
При том, что не нужно один вопрос другим подменять. :((( Это сообщение отредактировал(а) tol05 - 25.10.2007, 08:49 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Voyager,
В общем так, у тебя есть таблица в ДатаСет(как ты ее получил твои проблемы) и ты хочешь на основании этой таблицы обновить таблицу в базе данных. При этом есть одна токость: если в базе данных существует запись с данным ID, то строка просто обновляется, если в базе нет строки с таким ID, то в базу записывается новая строка. Правильно ли я тебя понял? Если правильно, то юзай Update-команду ДатаАдаптера для твоего ДатаСета. Все. Будет медленно, но сработает. Или в цыкле проходишь все строки таблицы ДатаСета и выполняешь каждый раз проверку на наличие ID в базе: если есть - update, нет - insert. Но думаю это будет тоже не очень быстро. Удачи. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: нет Всего: 18 |
Правильно.
Пробовал, ругается на уникальный PK_KEY в таблице в бд (видимо в случае когда такие ID в базе есть). Но спасибо за ответ, буду еще пробовать. Это сообщение отредактировал(а) Voyager - 25.10.2007, 12:45 |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Voyager,
А вот если такого ID нет, то тут действительно скользкий момент. По идее нужно делать INSERT, но у меня в программе срабатывает и UPDATE. Я создаю в БД пустую таблицу, вызываю её в ДатаСет, там заполняю ее данными, через CommandBuilder генериться команда UPDATE(именно update проверял через брейкпойнты) и все данные из таблицы ДатаСет "закачиваются" в пустую таблицу БД. Покажи как выглядит у тебя sql-команда UPDATE. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| ArsNov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 148 Регистрация: 1.9.2005 Репутация: нет Всего: 1 |
Всех приветствую! а какая субд? access ?mysql?
Это сообщение отредактировал(а) ArsNov - 25.10.2007, 20:01 |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: нет Всего: 18 |
Сейчас у меня выглядит все так:
Текст ошибки: violation of PRIMARY or UNIQUE KEY constraint "PK_MYTABLE" on table "MyTable" То если ID есть в базе не может обновить? ArsNov, да по сути неважно (но FireBird). Это сообщение отредактировал(а) Voyager - 26.10.2007, 11:43 |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
Voyager,
Слушай, а твои данные из XML, что не содержат ID? Я вижу что, ты добавляешь в таблицу датасета после считывания данных из xml еще колонку с ID. Если у тебя нет в xml ID, и тебе просто надо эти данные загнать в таблицу БД, и если там ID автонумерация, то выполняй просто INSERT в цикле(сделай foreach для строк в таблице ДС) То БД сама присвоит ID. Если автонумерации в БД нет, то генери ID соответствующего формата, заполняй построчно эту колонку и потом только обновляй. И еще совет обновление или insert делай в цикле. Так будет надежнее и быстрее. Напиши сам команду на update или insert и выполни ее программно(через dbCmd.ExecuteNonQuery() где dbCmd это обьект команды), а не
-------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: нет Всего: 18 |
||||
|
||||
| voodoo_alik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
1. Если таблица в БД имеет такую-же структуру как DataTable, то тебе должен помочь объект SqlCommandBuilder.
2. Если тебе необходимо генерировать новое значение для первичного ключа, то это лучше делать встроенными средствами СУРБД, либо можно реализовать генератор самому. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |