Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Синхронизация с БД


Автор: Unlocker 2.12.2008, 23:52
Всем привет!
Вместе с проектом курсовой по БД (MS Sql Server 2k5 + ADO.NET 2.0) появилась проблема.
Есть довольно большая БД. Ниже приведен рабочий фрагмент.
<img src="http://pic.ipicture.ru/uploads/081202/EhP7u5R6Tr.jpg" border="0">
Books, Keyword - сущностные таблицы с первичными ключами, Books_Keywords -  операционная таблица, состоящая из 2х внешних ключей и не имеющая первичного.
Модель действий такова: пользователь выбирает запись из DataGridView, щелкает по кнопке, выплывает окно с привязками для этой записи (назначить книге ключевые слова). На новом окне расположен ListView, на котором галочками отмечены существующие привязки. Пользователь выбирает нужные ему, щелкает по кнопке. На этом фрагменте необходимо сохранить в БД изменившиеся привязки. Т.е. мы сперва удаляем старые, а потом полностью вставляем новые строки, чтобы избежать дублирования одинаковых записей.
Код кнопки, отвечающей за последние действия приведен ниже:
Код

        private void btnKeywordsSave_Click(object sender, EventArgs e)
        {
            // Получение массива старых привязок и их удаление.
            DataRow[] toDelete = dsBooks.Books.FindByBookID(InstanceID).GetChildRows(dsBooks.Relations["FK_Books_Keywords"]);
            DataTable dtB_K = dsBooks.Books_Keywords;
            foreach (DataRow row in toDelete)
            {
                dsBooks.Books_Keywords.Rows.Remove(row);
            }
            // Вставка новых привязок, исходя из нового состояния ListView.
            for (int i = 0; i < lsvKeywordSelect.Items.Count; i++)
            {
                if (lsvKeywordSelect.Items[i].Checked)
                {
                    UserListViewItem ulvi = (UserListViewItem)lsvKeywordSelect.Items[i];
                    dsBooks.Books_Keywords.Rows.Add(InstanceID, ulvi.ID);
                }
            }
            // Попытка сохранить действия в БД.
            dsBooks.AcceptChanges();
            this.books_KeywordsTableAdapter.Update(this.dsBooks.Books_Keywords);
            this.Close();
        }

Главный вопрос: как сохранить изменения в соотвествующую таблицу БД? чтобы по закрытии дочернего окошка ListBox на родительской форме, имеющий DataBinding по отношению к соответствующей таблице в БД отражались изменения?
Приму в свой адрес конструктиквную критику, уточняющие вопросы и мнения по поводу выше изложенной проблемы.

PS: поиск юзал, но необходимого по содержанию топика обнаружить не удалось.
PPS: если не удалось просмотреть схему БД по ссылке, то к посту она приложена.

Автор: Varenij 29.12.2008, 09:49
Мне кажется ты все немного усложняешь
можно для удаления выполнить что-то типа этого?
Код

delete from books_keywords where book_id = [ключ книги к которой удаляем привязки]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)