Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250

Удаление строки из БД

26.07.2013, 09:13. Показов 1345. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые форумчане.
Помогите с решением маленькой проблемы.
1. Есть БД, и обращение к ней веду через DataSet:
C#
1
2
3
4
 _songDs = new DataSet("MusicBase");
 _songDa = new SqlDataAdapter("SELECT * FROM Song ORDER BY Name", _adressBase);
 _songDb = new SqlCommandBuilder(_songDa);
 _songDa.Fill(_songDs, "SongTable");
2. Для сохранения изменений в БД использую:
C#
1
 _songDa.Update(songDs.Tables["SongTable"]);
при добавлении новой записи в БД все проходит нормально, она добавляется как в DataGrid, так и в БД при вызове метода с _songDa.Update(songDs.Tables["SongTable"]);
но при удалении записи из БД:
C#
1
2
3
4
5
6
 
DataRow deleteSong;
var filterSong = String.Format("ID = '{0}'", selectRowGuid);
SongTable.RowFilter = filterSong;
deleteSong =SongTable[0].Row;
 _songDs.Tables["SongTable"].Rows.Remove(deleteSong);
при такой записи удаление из DataGrid происходит на ура, но при вызове
C#
1
 _songDa.Update(songDs.Tables["SongTable"]);
для внесения изменений в БД, запись не удаляется....
Я понимаю, что вопрос вопрос возможно яйца выеденного не стоит, но тем не менее. Подскажите что я не так делаю.
За ранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2013, 09:13
Ответы с готовыми решениями:

БД с операциями: добавление новой строки, удаление строки, редактирование имеющейся строки
Нужно создать базу данных в паскале, с операциями: добавление новой строки, удаление строки, редактирование имеющей строки. Желательно с...

Здесь есть удаление столбца, как добавить удаление строки
#include <iostream> #include <conio.h> using namespace std; int main() { int n; do {cout << "Razmer massiva: "; cin >> n;...

Строки.Удаление из строки повтор. Найти сумму не используя арифметическое сложение
1)Дана строка. Удалить из строки повторяющиеся символы. К примеру "aaabbccccc" -> "abc". Желательно через функцию. 2)Вводяться 2 очень...

19
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
26.07.2013, 09:24
Delete запрос в адаптере корректный?
0
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 09:26  [ТС]
Цитата Сообщение от Kruds Посмотреть сообщение
Delete запрос в адаптере корректный?
_songDb = new SqlCommandBuilder(_songDa);
насколько я понимаю данная запись автоматически формирует Update,Delete и Insert.
0
16 / 16 / 2
Регистрация: 17.02.2012
Сообщений: 104
26.07.2013, 09:28
Цитата Сообщение от Alex_student Посмотреть сообщение
_songDb = new SqlCommandBuilder(_songDa);
насколько я понимаю данная запись автоматически формирует Update,Delete и Insert.
SELECT * FROM Song ORDER BY Name

где ж там упдейт делит и инсерт?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
26.07.2013, 09:29
Alex_student, проверьте все же в дебаггере что там в DeleteCommand стоит.
0
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 09:52  [ТС]
Цитата Сообщение от TugRRRa Посмотреть сообщение
SELECT * FROM Song ORDER BY Name

где ж там упдейт делит и инсерт?
SqlCommandBuilder - автоматически генерирует однотабличные команды, которые позволяют согласовать изменения, вносимые в объект DataSet, со связанной базой данных SQL Server. Этот класс не наследуется. А это тогда что?

Добавлено через 17 минут
Цитата Сообщение от Kruds Посмотреть сообщение
Alex_student, проверьте все же в дебаггере что там в DeleteCommand стоит.
что-то к сожалению не совсем вас понимаю
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
26.07.2013, 09:53
Поставьте break point на строку _songDa.Update(songDs.Tables["SongTable"]); которая обрабатывает удаление, и посмотрите в свойствах адаптера какое значение имеет DeleteCommand.
0
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 09:59  [ТС]
Цитата Сообщение от Kruds Посмотреть сообщение
Поставьте break point на строку _songDa.Update(songDs.Tables["SongTable"]); которая обрабатывает удаление, и посмотрите в свойствах адаптера какое значение имеет DeleteCommand.
значение null(
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
26.07.2013, 10:01
Может лучше ручками команды в адаптер прописать?
1
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 10:02  [ТС]
да я вот уже думаю если честно...попробую как-то разобраться как ручкамиспасибо большое. опыта мало просто с этими БД и запросами
0
25 / 25 / 4
Регистрация: 01.07.2013
Сообщений: 53
26.07.2013, 10:06
Может я неправильно делаю, но я исспользую DataSet + DataAdapter только для Select комманд (поиска и заполнения).
Для записи, удаления я исспользую ExecuteNonQuery(), после чего обновляю DS напрямую из базы.
0
26.07.2013, 10:15

Не по теме:

Vtiratelj, лично я для работы с БД использую команды без DS чуть реже чем всегда, но неудобство тут есть: если работать с большим числом строк, то обновлять данные после каждой вставки/удаления чревато тормозами.

0
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 10:18  [ТС]
Kruds,
может подскажите как используя DataSet прописать эту команду Delete? просто переходить на прямые запросы уже походу поздно..слишком много логики в программе завязано на DataSet
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
26.07.2013, 10:23
Да вот пример.
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.07.2013, 10:32
Цитата Сообщение от Alex_student Посмотреть сообщение
_songDs.Tables["SongTable"].Rows.Remove(deleteSong);
Ща опять буду трындеть на угад, но похоже проблема в этом. Нужно не удалять строку из колекции, а помечать её как "удаленную" методом Delete()
0
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
26.07.2013, 10:41  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Ща опять буду трындеть на угад, но похоже проблема в этом. Нужно не удалять строку из колекции, а помечать её как "удаленную" методом Delete()
Если использовать
C#
1
_songDs.Tables["SongTable"].Rows.Remove(deleteSong);
я так понимаю вы подразумеваете что надо
C#
1
_songDs.Tables["SongTable"].Rows.Delete...
но там даже вызова этого метода нету
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
26.07.2013, 11:01
Цитата Сообщение от Alex_student Посмотреть сообщение
но там даже вызова этого метода нету
Этот метод помечает строку как "удаляемую", и применяется соответственно к строке, а не к коллекции. Лучше где-то почитать о нём, я сам про это узнал ~48 часов назад.

C#
1
_songDs.Tables[0].Rows[0].Delete();
1
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.07.2013, 11:46
добавьте DeleteCommand:
C#
1
2
_songDa.DeleteCommand =  new SqlCommand(@"Delete from Song where ID=@Id", объект connection);
_songDa.DeleteCommand.Parameters.Add("@Id", SqlDbType.Int).SourceColumn = "ID";
и после этого вызывайте Update.

и верно сказали, следует использовать метод Delete() для строки(это метод DataRow, а не DataRowCollection), а не Remove, так как
При удалении строки все данные в этой строке утрачиваются. Также можно вызвать метод Delete класса DataRow для указания строки для удаления. Вызов метода Remove аналогичен вызову метода Delete с последующим вызовом метода AcceptChanges.
и после этого адаптер не видит удаленную строку.
то есть пишите:
C#
1
deleteSong.Delete();
1
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
27.07.2013, 20:58  [ТС]
Спасибо всем огромное
сделал как и советовали:
добавил команду
C#
1
2
3
 var connection = new SqlConnection(_adressBase);
            _songDa.DeleteCommand = new SqlCommand("DELETE FROM Song WHERE ID=@ID", connection);
            _songDa.DeleteCommand.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).SourceColumn = "ID";
поиск и задача удаления:
C#
1
2
3
4
var filterSong = String.Format("ID = '{0}'", selectRowGuid);
SongTable.RowFilter = filterSong;
deleteSong = SongTable[0].Row;
deleteSong.Delete();
а вот возник вопрос, пока лазил по нету нарвался на такую запись:
C#
1
2
DataRow deleteSong = _songDs.Tables["SongTable"].Rows.Find(idSong);
deleteSong.Delete();
и походу такая запись удаляет тоже запись с таблицы, без объявления команды на удаление. Но к сожалению такая запись подходит только к таблицам где объявлен Первичный ключ, а есть что-то похожее для таблиц без ключа....
и еще, подскажите пожалуйста где можно более подробно и толково почитать про связь с таблицами или только msdn мне в помощь?...а то осталось чувство мягко говоря неполного понимания
еще раз спасибо всем
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
31.07.2013, 14:36
Для Find дейтствительно необходим столбец-ключ. Он у Вас уже есть - это ID.
Просто необходимо выполнить следующее:
C#
1
_songDs.Tables["SongTable"].PrimaryKey = new DataColumn[] {_songDs.Tables["SongTable"].Columns["ID"] };
эта строчка укажет какой столбец(столбцы) является ключевым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.07.2013, 14:36
Помогаю со студенческими работами здесь

Поиск строки и удаление строки, опираясь только на символы в ней
Всем привет! Нужно чтобы программа находила строку в текстовом документе, опираясь на символы в ней. Процедура поиска определенных символов...

Как запретить удаление строки в DataGridView, если пользователь не выбрал ни одной строки?
Здравствуйте! У меня есть datagridview и кнопка удаления записи на форме. Данные в datagridview попадают из таблицы базы данных...

Поиск по заданному выражению строки в файле и удаление найденной строки и нескольких прилежащих к ней строк
Доброго времени суток! Помогите, пожалуйста, разобраться. У меня лог файл, из которого мне нужно найти строки, в которых содержится...

Строки. Удаление заданной группы символов из строки
Задана строка S Задан массив символов alphabet='asdfghjkl' //Проел в этот массив не писать В строке нужно оставить только такие...

Удаление строки из файла\либо удаление самого файла.
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE *fout; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru