Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удаляются строки из БД, при Update() SqlDataAdapter'а / 15 сообщений из 15, страница 1 из 1
19.07.2006, 11:28
    #33863182
Myloe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Проблема такая. Использую типизированный ДатаСет. ДатаАдаптеры создал через дизайнер, подключил, датасет заполнился. НО.. При удалении строки таблицы из датасета, после вызова myAdapter.Update(myDataSet, "MyTableName"), изменения не сохраняются в БД. Хотя при вставке новой строки - всё работает. Команда удаления в Адаптере создана автоматически:

this.sqlDeleteCommand4.CommandText = "DELETE FROM User_Group WHERE (GrID = @Original_GrID) AND (UserID = @Original_UserID)";
this.sqlDeleteCommand4.Connection = this.sqlConnection1;
this.sqlDeleteCommand4.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_GrID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "GrID", System.Data.DataRowVersion.Original, null));
this.sqlDeleteCommand4.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_UserID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "UserID", System.Data.DataRowVersion.Original, null));

Подскажите, в чём может быть проблема.
...
Рейтинг: 0 / 0
19.07.2006, 12:18
    #33863416
Myloe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
P.S. Использую VS 2003
...
Рейтинг: 0 / 0
19.07.2006, 12:29
    #33863468
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Запустите Profiler...
...
Рейтинг: 0 / 0
19.07.2006, 13:00
    #33863600
Myloe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Ага. Пусто... Хотя UPDATE и INSERT срабатывают нормально.
...
Рейтинг: 0 / 0
19.07.2006, 14:01
    #33863863
Myloe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Так и что дальше делать? В чём проблема?
...
Рейтинг: 0 / 0
20.07.2006, 11:46
    #33866367
Super_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
MyloeТак и что дальше делать? В чём проблема?

У меня та же проблема, только в 2005-той студии... Инсерт и апдейт работают, а удаление никак не пашет... Уже все перепробывал!
...
Рейтинг: 0 / 0
20.07.2006, 12:07
    #33866468
RomCom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Удаление надо обрабатывать в событии Table.RowChanged
Иначе запись удаляется из таблицы и методу myAdapter.Update(myDataSet, "MyTableName") ничего не перепадает.
...
Рейтинг: 0 / 0
20.07.2006, 12:10
    #33866487
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Super_p
Инсерт и апдейт работают, а удаление никак не пашет... Уже все перепробывал!

а есть что удалять???
пробовали перед Update посмотреть есть ли записи для удаления
Код: plaintext
1.
GetChanges(DataRowState.Deleted);
+ профайлером посмотреть что за команда идет к серваку. Проверить исполнить ее в QA.
Посмотреть есть ли записи удовлетворяющие where, вполне возможно что записей удовлетворяющих where уже нет.
тогда по идее должен выпасть exception.
вообщем призыв один - проверять свой код по шагам.
....

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
20.07.2006, 12:57
    #33866766
Super_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Sa
Super_p
Инсерт и апдейт работают, а удаление никак не пашет... Уже все перепробывал!

а есть что удалять???
пробовали перед Update посмотреть есть ли записи для удаления
Код: plaintext
1.
GetChanges(DataRowState.Deleted);
+ профайлером посмотреть что за команда идет к серваку. Проверить исполнить ее в QA.
Посмотреть есть ли записи удовлетворяющие where, вполне возможно что записей удовлетворяющих where уже нет.
тогда по идее должен выпасть exception.
вообщем призыв один - проверять свой код по шагам.
....

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3


Я удаляю строку из ДатаСет-а, а потом делаю Update...
...
Рейтинг: 0 / 0
21.07.2006, 05:13
    #33868674
RomCom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Попробуте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
myDataSet.Tables["MyTableName"].RowDeleted += new DataRowChangeEventHandler(Row_Deleted);
...........
        public void Row_Deleted(Object sender, DataRowChangeEventArgs e)
        {  
           myAdapter.Update(new DataRow[] { e.Row });
        }

P.S. мои опыты с GetChanges(DataRowState.Deleted); показали, что этот метод, с данным параметром, всегда возращает null.
...
Рейтинг: 0 / 0
21.07.2006, 07:15
    #33868736
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
RomCom
Удаление надо обрабатывать в событии Table.RowChanged

хм... не в одной из моих программ нет этого, однако записи прекрасно удаляются.
RomCom
мои опыты с GetChanges(DataRowState.Deleted); показали, что этот метод, с данным параметром, всегда возращает null.

вы просто не умеет его готовить :-) и я догадываюсь в чем здесь причина. но все же надо смотреть ваш код.

Иллюстрирующий пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
DataTable dt = CreateDataTable();
DataTable deleted = dt.GetChanges(DataRowState.Deleted);
if (deleted != null) {
     Console.WriteLine(string.Format("(before) deleted rows = {0}", deleted.Rows.Count));
} else {
     Console.WriteLine("(before) no rows"); // удалений не было попадем сюда
}

dt.Rows[1].Delete(); // удаление раз
dt.Rows[2].Delete(); // удаление еще раз

deleted = dt.GetChanges(DataRowState.Deleted);
if (deleted != null) {
     Console.WriteLine(string.Format("(after) deleted rows = {0}", deleted.Rows.Count)); // а теперь попадем сюда
} else {
     Console.WriteLine("(after) no rows");
}

private DataTable CreateDataTable() {
     DataTable dt = new DataTable();
     dt.Columns.Add(new DataColumn("id", typeof(int)));
     dt.Columns.Add(new DataColumn("col1", typeof(string)));
     dt.Columns.Add(new DataColumn("col2", typeof(string)));
     dt.Rows.Add(new object[] {1, "id 1", "laksdfj"});
     dt.Rows.Add(new object[] {2, "id 2", "laksasdfasfd" });
     dt.Rows.Add(new object[] { 3, "id 3", "lafasfd" });
     dt.AcceptChanges();
     return dt;
}

Результат:
Код: plaintext
1.
2.
(before) no rows
(after) deleted rows =  2 

Super_p
Я удаляю строку из ДатаСет-а, а потом делаю Update...

это все понятно. но проделайте все действия описанные мною в предыдущем посте, чтобы разобраться в причине.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
23.07.2006, 09:11
    #33872225
Myloe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
У меня проблема решилась. Нужно было удалять объект DataRow напрямую, вызовом метода Delete(), а я делал через генерированный метод удаления в ДатаСете. Видимо строка просто удалялась из коллекции Rows, а не помечалась к удалению
...
Рейтинг: 0 / 0
24.07.2006, 06:10
    #33872670
RomCom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Действительно через метод Rows[index].Delete() получается :)
Я же до этого использовал метод Rows.RemoveAt(index) и запеси удалялись безвозвратно.
Sa, спасибо за наводку.
...
Рейтинг: 0 / 0
29.07.2006, 23:13
    #33887271
Tolya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
[....] пользуется UPDATE тем более во фреймворке 1.1. Используй хранимые процедуры для вставки, обновления или удаления. Это работает безотказно. ADO.NET вообще вещь медленная и честно говоря фигня это.
Все эти прибамбасы приводят только к замедлению работы. А этот метод глюкавый, так что лучше его не вызывай.

Модератор:
Сообщение отредактировано.
По меньше эмоций, давайте уважать других участников форума!
...
Рейтинг: 0 / 0
30.07.2006, 01:30
    #33887357
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не удаляются строки из БД, при Update() SqlDataAdapter'а
Tolya
Используй хранимые процедуры для вставки, обновления или удаления. Это работает безотказно.

не всегда ХП нужны, чтобы не привязываться жестко к поставщику СУБД. Все зависит от задачи автора, т.к. мы ее не знаем, ИМХО советы давать такие излишни опрометчиво.
+ про ХП уже обсуждалось на форуме. можно воспользоваться поиском.

Tolya
ADO.NET вообще вещь медленная и честно говоря фигня это.

no comments, тем более на форуме, посвященной этой технологии.

Tolya
Все эти прибамбасы приводят только к замедлению работы. А этот метод глюкавый, так что лучше его не вызывай.

а пример глюкавости можете привести? Насколько я понял речь идет про метод Delete ?

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удаляются строки из БД, при Update() SqlDataAdapter'а / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]