Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 15.09.2012
Сообщений: 10
1

Повторное удаление

22.04.2013, 21:59. Показов 744. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У меня такая проблема. При работе с базой данных, а точнее при удалении записи, удаляется две записи, а не одна. Также я заметила если добавить запись, то уведомление о добавлении тоже дублируется, хотя запись появляется одна. Помогите пожалуйста найти ошибку, из-за чего происходит это дублирование. Я прикреплю код, но если кто-то возьмется помогать могу потом прикрепить и весь проект, чтобы было понятнее.
C#
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
public partial class working_with_database_cons : Form
    {
        SqlDataAdapter dataAdapter;
        bool edit = false, irkutskaya = false, krasnoyarskiy = false, review = false;
 
        public working_with_database_cons()
        {
            InitializeComponent();
        }
 
        //метод включения и выключения видимости кнопок
        private void buttonRegionVisibleOn()
        {
            buttonReview.Visible = false;   // выключаем кнопку просмотр
            buttonEditing.Visible = false;  // выключаем кнопку редактирование
            buttonBack.Visible = true;  // включение кнопки назад
            labelRegion.Visible = true; // метка выберите регион
            buttonKrasnoyarskiy.Visible = true;
            buttonIrkutskaya.Visible = true;
        }
 
        private void ConnectionBase(string sql) //метод соединения с базой и отображения данных
        {            
            // Формируем запрос к базе данных -
            //запрашиваем информацию о планетах
            // string sql = "SELECT * FROM Объекты_потребления_энергоресурсов";
 
            //string sql = "SELECT DISTINCT Номер_объекта FROM Объекты_потребления_энергоресурсов";
            // string sql = "SELECT * FROM Регионы INNER JOIN Объекты_потребления_энергоресурсов ON Регионы.Номер_Региона = Объекты_потребления_энергоресурсов.Номер_Региона WHERE Номер_Региона='3'";
 
            string connectionString;
            // DataTable сохраняет данные в памяти как таблицу
            DataTable dataTable = new DataTable();
 
            connectionString = @"Data Source=COMP;Initial Catalog=energy_projects;
            Integrated Security=SSPI;";
 
            SqlConnection connection1 = new SqlConnection(connectionString);
 
            //Открываем соединение
            connection1.Open();
 
            //Создаем команду
            SqlCommand sqlCommand = new SqlCommand(sql, connection1);
            //Создаем адаптер
            // DataAdapter - посредник между базой данных и DataSet
            dataAdapter = new SqlDataAdapter(sqlCommand);
 
            //Создаем построитель команд
            //Для адаптера становится доступной команда Update
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
            // Данные из адаптера поступают в DataTable
            dataAdapter.Fill(dataTable);
            // Связываем данные с элементом DataGridView
            dataGridView.DataSource = dataTable;
            // Очистка
            connection1.Close();
        }
 
        //метод редактирования данных
        private void buttonEditing_Click(object sender, EventArgs e)
        {
            edit = true;            
            buttonRegionVisibleOn();
        }
        //метод просмотра данных
        private void buttonReview_Click_1(object sender, EventArgs e)
        {
            review = true;
            buttonRegionVisibleOn();  // вызываем метод изменения видимости кнопок  
            dataGridView.ReadOnly = true;
        }
 
        void ButtonSave_Click(object sender, System.EventArgs args)
        {
            try
            {
                dataAdapter.Update((DataTable)dataGridView.DataSource);
                MessageBox.Show("Изменения в базе данных выполнены!","Уведомление о результатах", MessageBoxButtons.OK);
            }
            catch (Exception)
            {
                MessageBox.Show("Изменения в базе данных выполнить не удалось!","Уведомление о результатах", MessageBoxButtons.OK);
            }
        }
 
 
        private void buttonDelete_Click(object sender, EventArgs e)
        {
            this.dataGridView.Rows.Remove(this.dataGridView.CurrentRow);
            this.dataAdapter.Update((DataTable)dataGridView.DataSource);           
        }
        
        private void buttonRegionVisibleOff()
        {
            buttonBack.Visible = false;
            labelRegion.Visible = false;
            buttonKrasnoyarskiy.Visible = false;
            buttonIrkutskaya.Visible = false;
        }
 
        private void buttonBack_Click(object sender, EventArgs e)   // Нажатие кнопки назад
        {
            review = false;
            edit = false;
            buttonReview.Visible = true;
            buttonEditing.Visible = true;
            buttonRegionVisibleOff();
            dataGridView.ReadOnly = false;
        }
 
        private void buttonBranchVisibleOn() // Включение отображения кнопок отраслей
        {
            buttonCmetallurgy.Visible = true;
            buttonBmetallurgy.Visible = true;
            dataGridView.Visible = false;
            buttonBackRegion.Visible = true;    // включение кнопки назад к регионам            
        }
 
        private void buttonBranchVisibleOff() // Выключение отображения кнопок отраслей
        {
            buttonCmetallurgy.Visible = false;
            buttonBmetallurgy.Visible = false;
        }
 
        private void buttonHandlerRegion(string regionName)
        {
            buttonRegionVisibleOff();   // выключение кнопок выбора региона           
            labelBranch.Visible = true;     // метка выберите отрасль            
            if (review == true)
            {
                labelCaption.Text = "Просмотр данных по " + regionName;
            }
            if (edit == true)
            {
                labelCaption.Text = "Редактирование данных по " + regionName;
            }
        }
 
        private void buttonHandlerBranch(string branchName)
        {
            buttonBranchVisibleOff();   // выключение кнопок выбора отрасли
            buttonBackBranch.Visible = true;    // включение кнопки назад к отраслям
            labelBranch.Text = branchName;     // метка название выбранной отрасли     
            buttonBackRegion.Visible = false;   // выключаем кнопку назад к регионам
            dataGridView.Visible = true;
            labelKVT.Visible = true;    // метка измерения мощности    
            if (edit == true)
            {
                buttonSave.Visible = true;
                buttonDelete.Visible = true;
                buttonSave.Click += new System.EventHandler(ButtonSave_Click);
                buttonDelete.Click += new System.EventHandler(buttonDelete_Click);
            }
        }
 
        private void buttonKrasnoyarskiy_Click(object sender, EventArgs e)  // Нажатие кнопки "Красноярский край"
        {
            krasnoyarskiy = true;
            buttonHandlerRegion("Красноярскому краю");
            buttonBranchVisibleOn();
        }
 
        private void buttonIrkutskaya_Click(object sender, EventArgs e)
        {
            irkutskaya = true;
            buttonHandlerRegion("Иркутской области");
            buttonBranchVisibleOn();
        }
 
        private void buttonBackRegion_Click(object sender, EventArgs e)
        {
            buttonRegionVisibleOn();
            labelBranch.Visible = false;
            buttonBackRegion.Visible = false;
            labelCaption.Text = " ";
            buttonBranchVisibleOff();
            krasnoyarskiy = false;
            irkutskaya = false;
        }
        private void buttonBackBranch_Click(object sender, EventArgs e) // назад к отраслям
        {
            buttonBackBranch.Visible = false;   //отключение кнопки назад к отраслям
            buttonBranchVisibleOn();    // включение кнопок выбора отрасли
            labelBranch.Text = "Выберите отрасль";
            labelKVT.Visible = false;   // убираем метку о мощности
            buttonSave.Visible = false;
        }
 
        private void HandlerIf(bool regionFlag,string query) 
        {
            if (regionFlag == true)
            {
                ConnectionBase(query);
            }           
        }
 
        private void buttonCmetallurgy_Click(object sender, EventArgs e)
        {
            buttonHandlerBranch("Цветная металлургия");
            HandlerIf(krasnoyarskiy, "SELECT Название_объекта, Мощность_2010г FROM Объекты_потребления_энергоресурсов WHERE Номер_региона = '1' AND Номер_отрасли = '1'");
            HandlerIf(irkutskaya, "SELECT  Номер_объекта,Название_объекта, Мощность_2010г, Мощность_2020г, Номер_региона, Номер_отрасли FROM Объекты_потребления_энергоресурсов WHERE Номер_региона = '2' AND Номер_отрасли = '1'");            
        }       
 
        private void buttonBmetallurgy_Click(object sender, EventArgs e)
        {
            buttonHandlerBranch("Черная металлургия");
            HandlerIf(krasnoyarskiy, "SELECT Название_объекта, Мощность_2010г FROM Объекты_потребления_энергоресурсов WHERE Номер_региона = '1' AND Номер_отрасли = '2'");
            HandlerIf(irkutskaya, "SELECT Название_объекта, Мощность_2010г FROM Объекты_потребления_энергоресурсов WHERE Номер_региона = '2' AND Номер_отрасли = '2'");            
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2013, 21:59
Ответы с готовыми решениями:

повторное подключение
у меня две формы.на первой регистрация ползователя.все пользователи забиты в БД.при нажатии на...

Повторное соединение
Доброго времени суток. Есть такая проблема. Я связываю комбобокс txtAgent с таблицей Agents....

Повторное подключение к БД (connection string)
Подскажите плиз, как сделать, чтобы при неоткрывшемся соединении (connection not opened) программа...

Стирание ранее заполненного DataSet и повторное заполнение. Нарушение отображения в DataGridView
Доброго времени суток, Господа. У меня возникла проблема, которую не могу решить уже не первый...

5
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
22.04.2013, 22:48 2
почему dataAdapter 2 раза ?
C#
1
SqlDataAdapter dataAdapter;
и
C#
1
dataAdapter = new SqlDataAdapter(sqlCommand);
возможно когда происходит
C#
1
dataAdapter.Fill(dataTable);
компилятор не поймет к какому конкретно dataAdapter'у это относится и выполняет 2 сразу.
0
2 / 2 / 1
Регистрация: 15.09.2012
Сообщений: 10
23.04.2013, 01:09  [ТС] 3
Цитата Сообщение от wm_leviathan Посмотреть сообщение
почему dataAdapter 2 раза ?
C#
1
SqlDataAdapter dataAdapter;
и
C#
1
dataAdapter = new SqlDataAdapter(sqlCommand);
возможно когда происходит
C#
1
dataAdapter.Fill(dataTable);
компилятор не поймет к какому конкретно dataAdapter'у это относится и выполняет 2 сразу.
А разве dataAdapter в данном случае не является глобальной переменной? В начале объявили, а внутри ConnectionBase просто присваиваем значение. Разве не так?

Добавлено через 1 час 42 минуты
Проблема решена
0
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
23.04.2013, 09:07 4
Нет, оператор new создает новый экземпляр. получается сначала 1 DT создается как глобальный а 2й создается через new
0
3 / 3 / 3
Регистрация: 21.02.2012
Сообщений: 42
15.06.2013, 16:16 5
Цитата Сообщение от Meggy M Посмотреть сообщение
А разве dataAdapter в данном случае не является глобальной переменной? В начале объявили, а внутри ConnectionBase просто присваиваем значение. Разве не так?

Добавлено через 1 час 42 минуты
Проблема решена
Не могли бы вы написать как решили эту проблему.
0
2 / 2 / 1
Регистрация: 15.09.2012
Сообщений: 10
15.06.2013, 16:22  [ТС] 6
Цитата Сообщение от HelpNovice Посмотреть сообщение
Не могли бы вы написать как решили эту проблему.
Дело в том что buttonDelete.Click += new System.EventHandler(buttonDelete_Click); вызывался не в том месте.
он должен задаваться только один раз, например в конструкторе, либо в методе формы Load.
1
15.06.2013, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2013, 16:22
Помогаю со студенческими работами здесь

Повторное использование HttpWebRequest
Задача: получить с сайта html код, взять оттуда некие данные и затем на этот же сайт отправить post...

Повторное выполнение программы
Всем привет, у меня такая проблема : есть код using System; using System.Collections.Generic;...

Повторное использование сокетов
при попытке отправить второй раз текст на сервер выходит exception server class...

Повторное использование исходного кода в C#
есть желание собрать в одном solution несколько (два для начала) projects с разными целевыми...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru