Аватар для Atico
0 / 0 / 3
Регистрация: 11.03.2015
Сообщений: 34

Удаление из БД в клиентском приложении

21.06.2017, 23:33. Показов 828. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Есть такая проблема.
Есть база данных с которой я работаю из приложения. В ней несколько таблиц.

Проблема:
Есть кнопка удалить из БД. Мы выбираем запись из dataGridView и по выбранному ключевому полю он удаляет.
Но если эта запись используется дальше в БД(на нее ссылаються), то вызовет исключение. Как можно перехватить это? Желательно как-нибудь на клиенте.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
scn = new SqlConnection(@"Data Source=DESKTOP-S9PP48E;Initial Catalog=Diplom;Integrated Security=True"); // В этой строчке мы подключаем нашу базу(имя ее пр входе в бд), потмо навзание базы данных(в которой работаем).
            scm = new SqlCommand("Del_PaspDan", scn);              //Название процедуры
            scm.CommandType = CommandType.StoredProcedure;
            scm.Parameters.AddWithValue("@Kod_PaspDan", this.textBox1.Text = GetCellValue());//GetCellValue());
            scn.Open();
            scm.ExecuteNonQuery();
 
 
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            SqlCommand com = new SqlCommand();
            SqlDataAdapter adapter = new SqlDataAdapter();
            SqlConnection conn = new SqlConnection("Data Source=DESKTOP-S9PP48E;Initial Catalog=Diplom;Integrated Security=True");
 
            com.Connection = conn;
            com.CommandText = "Select * from VIEWPaspDan";
            conn.Open();
            adapter.SelectCommand = com;
            adapter.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();

Процедура удаления в SQL:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE Del_PaspDan
@Kod_PaspDan INT
AS
DECLARE @LocalError INTEGER
BEGIN TRANSACTION tr1
Save TRANSACTION pnt1
DELETE FROM PaspDan WHERE Kod_PaspDan = @Kod_PaspDan
SET @LocalError = @@ERROR
Save TRANSACTION pnt2
IF @LocalError = 0 
    BEGIN
        Commit TRANSACTION tr1
        Print 'Выполнено'
    END
ELSE
    BEGIN
        ROLLBACK TRANSACTION tr1
        Print 'Произошла ошибка'
    END
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2017, 23:33
Ответы с готовыми решениями:

Авторизация в клиентском приложении
Добрый день! В общем, проблема заключается в следующем: есть База Данных, в ней есть таблицы, ХП, представления, и т.д, создал 3-и...

Отчет в клиентском приложении
Есть готовая и работающее клиентское приложение в нем 2 отчета 1 в Exel он работает прекрасно. 2-ой в ворде и вот он не хочет добавлять...

Авторизация в клиентском приложении
Доброго времени суток. Возник такой вопрос, никак не могу найти в нете... Нужно создать приложение с авторизацией. То есть при запуску...

1
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
22.06.2017, 09:48
раз 10 перечитал, но так и не понял.
Что значит
Цитата Сообщение от Atico Посмотреть сообщение
эта запись используется дальше в БД(на нее ссылаються)
?
Имеется в виду, что в таблице присутствует поле, что является внешним ключом для другой таблицы? - Тогда решай вопрос о поведении в связанных таблиц на стороне сервера СУБД.
Я просто логику понять не смог, что нужно отлавливать?
И немного код процедуры не понятен мне. Вы сохраняете транзакцию постоянно - что это дает? Если процедура приведена в полном тексте - то эти сохранения тут абсолютно бесполезны, так как при ошибке - Вы все равно должны откатиться на место ДО удаления, а серверу нужно тратить доп ресурсы на сохранения транзакций, что не сильно прибавляет ему быстродействия. Если же приведен только фрагмент, а работы в процедуре на порядок больше - тогда понятно - может быть другая логика, которой не видно.
Да и логику удаления - тут много зависит от задач, но по опыту - бизнес (ну не для лаб же сделан c# ) - чаще всего хочет сначала сделать, посмотреть - а потом только сохранить данные. Поэтому я бы делал все действия на клиенте - а потом, когда понравилось сделанное - то передавал бы все скопом на сервер. А делать сразу же на сервере, каждый раз дергая соединение, дергая таблицу (а ведь она в блокировку может уйти, в зависимости, какой режим изоляции в транзакциях используется) - это не сильно хорошо, на мой скромный взгял. Но последний абзац - это чисто мой частный случай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2017, 09:48
Помогаю со студенческими работами здесь

Организация данных и связей в клиентском приложении WinForms
При работе над клиентским приложением возникли некоторые трудности с пониманием как реализовать данные в большом приложении. ...

Как создать авторизацию MS SQL Server в клиентском приложении на MS Access?
Есть БД на SQL Server с клиентской частью на Access. Вот и существует проблема с авторизацией. На данный момент использую вариант с защитой...

Удаление файла в HTA приложении
Пишу HTA приложение, но столкнулся с проблемой как правильно описать удаление файла. Пробую стандартными методами VBS не получается,...

Правильное динамическое создание и удаление элементов управления в приложении
Здравствуйте всем. Есть коды моего проекта, ниже я предоставил. У меня есть два переключателя RadioButton, один из них создаёт два элемента...

Вызов серверного сокета в клиентском
Мой серверный сокет помещен по следующему адресу http://321.32.321.32/~account/Server.class. Что следует написать для его вызова в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru