Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

И снова обновление БД через TableAdapter

10K
29 мая 2007 года
Sonic_amiga
34 / / 19.06.2006
--- cut ---
DataTable DealsTable = accountingDataSet.Tables["Deal"];
DataRowView MyRowView = (DataRowView)AcctTable.SelectedRows[0].DataBoundItem; // Берем текущую выбранную строчку в DataGridView, привязанном к DealsTable
DataRow MyRow = MyRowView.Row;
DealsTable.Rows.Remove(MyRow);
dealTableAdapter.Update(accountingDataSet);
--- cut ---
Вопрос: почему строка не удаляется из БД (при следующем запуске приложения строка на месте) ? Если я что-либо добавляю или меняю, все работает, метод Update() заносит изменения в базу.
23K
16 июля 2007 года
Ламерко
34 / / 03.07.2007
При создании dealTableAdapter можно создавать в нём SQL команду для удаления.
Попробуй использовать dealTableAdapter.Delete(...);
А вообщето твоим кодом что ты написал, просто задаёш статус
System.Data.DataRowState.Deleted
а для применения этого статуса нужно подтвердить его в таблице и ДатаСете т адаптереТаблиц с помощью AcceptChanges() функции.

Как по мне то проще добавить в АдаптерТаблиц SQL запрос на удаление и перегружать данные в таблице.
Попробую примерно описать, по проще, в общих чертах.
Пример для MSSQL но так же применим для других баз
Код:
class MyTableAdapter : System.Data.IDbDataAdapter
    {
        private System.Data.SqlClient.SqlCommand m_SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT * FROM `Employee`");
        private System.Data.SqlClient.SqlCommand m_DeleteCommand = new System.Data.SqlClient.SqlCommand("DELETE FROM `Employee` WHERE (`Employee`.`id`=@EmployeeID)");
        private System.Data.SqlClient.SqlConnection m_Connection = new System.Data.SqlClient.SqlConnection("строка для соеденения с БД");

        /// <summary>
        ///
        /// </summary>
        /// <param name="EmployeeID">Параметр для удаления записи в БД</param>
        /// <returns>Возврат количества удалённых записей</returns>
        public int Delete(int EmployeeID)
        {
            m_DeleteCommand.Connection = m_Connection;
            m_DeleteCommand.Connection.Open();
            int count_delete = m_DeleteCommand.ExecuteNonQuery();
            m_DeleteCommand.Connection.Close();


        }

        public DataTable GetTable()
        {
            m_SelectCommand.Connection = m_Connection;
            m_SelectCommand.Connection.Open();
            DataTable new_table;
             /*тут oписываеш создание таблицы*/
            m_SelectCommand.Connection.Close();
            return new_table;
        }

    }


использование:
/* Создаём наш ТаблеАдаптер */
MyTableAdapter m_Adapter = new MyTableAdapter();
/* Загружаем данные в таблицу */
DataTable myTable = m_Adapter.GetTable();
/* Выбираем запись (надеясь что она есть ;) ) */
DataRow row = myTable.Rows[0];
/* Удаляем запись опираясь на ключивое значение ID */
m_Adapter.Delete(row["id"]);
/* и снова загружаем данные если всё прошло успешно */
myTable = m_Adapter.GetTable();

ну вот примерно так.
Но данный клас и процедуры можно генерировать самой студией.
Ну а можно и ручками писать
10K
08 августа 2007 года
Sonic_amiga
34 / / 19.06.2006
--- cut ---
When a row is removed, all data in that row is lost. You can also call the Delete method of the DataRow class to just mark a row for removal. Calling Remove is the same as calling Delete and then calling AcceptChanges.
--- cut ---
Так что AcceptChanges() тут ни при чем.
10K
08 августа 2007 года
Sonic_amiga
34 / / 19.06.2006
Все, ура, ура, я разобрался.
Так вот, метод Update() работает исходя из статуса рядов. К такому выводу я пришел, прочитав о том, что метод Add() для DataRowCollection ставит Status = new для DataRow.
Следовательно, мне нужно только поменять статус. Remove() полностью выкидывает ряд из коллекции и он просто теряется.
Следующий код заработал без проблем:
 
Код:
DataRowView MyRowView = (DataRowView)AcctTable.SelectedRows[0].DataBoundItem; // Берем текущую выбранную строчку в DataGridView, привязанном к DealsTable
MyRowView.Row.Delete();
dealTableAdapter.Update(accountingDataSet);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог