Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.84.175] |
|
Сообщ.
#1
,
|
|
|
делаю:
DataSet Data = new DataSet(); OleDbConnection con = new OleDbConnection(connectionString); OleDbDataAdapter da = new OleDbDataAdapter("select * from mytable where prise=33", con); OleDbCommandBuilder builder = new OleDbCommandBuilder(da); da.Fill(Data, "myTable"); Data.Tables["myTable"].Clear(); int cnt = da.Update(Data, "myTable"); После чего cnt==0 и соотв в=из базы ничего не удалилось Обьясните, пожалйста, что я не так делаю? |
Сообщ.
#2
,
|
|
|
Если у тебя база подцеплена к проекту, то вполне возможно, что ты вносишь изменения в mdb-файл, лежащий в bin\debug, а студия его благополучно затирает при каждой компиляции. Чтобы этого избежать, нужно в свойствах то ли датасетов, толи базы выбрать Do Not Copy у свойства Copy to output directoty.
Далее, OleDbCommandBuilder у тебя вообще зачем? Добавь da.UpdateCommand = builder.GetUpdateCommand(); da.DeleteCommand = builder.GetDeleteCommand(); |
Сообщ.
#3
,
|
|
|
Цитата wdk @ Если у тебя база подцеплена к проекту, то вполне возможно, что ты вносишь изменения в mdb-файл, лежащий в bin\debug, а студия его благополучно затирает при каждой компиляции. Чтобы этого избежать, нужно в свойствах то ли датасетов, толи базы выбрать Do Not Copy у свойства Copy to output directoty. Далее, OleDbCommandBuilder у тебя вообще зачем? Добавь da.UpdateCommand = builder.GetUpdateCommand(); da.DeleteCommand = builder.GetDeleteCommand(); Не, база к проекту не подцеплена, там разные по ходу выполнения подключаються. Я думал, что OleDbCommandBuilder автоматом генерит комманды и сам их куданадо присваиват, я сделал как в примере из книги "Архитектура корпоративных программных систем" Фаулера. Прикол в том что если не чистить в коде таблицу а скармливать ее DataGrsdView и там клацать, то фсе пашет Пробовал добавить: da.UpdateCommand = builder.GetUpdateCommand(); da.DeleteCommand = builder.GetDeleteCommand(); ничего не дало, но с DataGrsdView работать не перестало, по-ходу команды в ручную можно и не присваивать. |
Сообщ.
#4
,
|
|
|
Мож тогда попробовать чистить так?
Data.Tables["myTable"].Rows.Clear(); |
Сообщ.
#5
,
|
|
|
Ufi, для того чтобы дата адаптер использовал DeleteCommand для удаления, в таблице должны быть строки с DataRowState=Deleted.
Для того чтобы перевести строку в такое состояние, нужно вызвать одноименный метод Delete() у DataRow, то есть, если удалять строки вот так: DataTable someDt; foreach (DataRow r in someDt.Rows) r.Delete(); а потом вызвать у DataAdapter Update() - будет работать точно Насчет Clear() для DataTable - не уверен что будет работать аналогично. Если интересно - напиши тестик Удачи |
Сообщ.
#6
,
|
|
|
Всем спасибо за участие! Все работает так как PIL написал :
DataTable someDt; foreach (DataRow r in someDt.Rows) r.Delete();//пашет Data.Tables["myTable"].Rows.Clear();//не пашет |