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

Удаление строки из базы данных MS SQL Server 2012

13.04.2014, 12:55. Показов 6784. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Только начинаю разбираться с тонкостями взаимодействия .NET и баз данных SQL (использую SQL server 2012). Так же использую Entity Framework. Возникла проблема с удалением выбранной строки из базы данных. Пишу приложение c использованием WinForm. Когда добавляю строку в базу данных проблем не возникает:
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
int Id = 200;
            using (var context = new Database103SQLEntities())
            {
                foreach (var cw in context.Coworkers1)
                {
                    if (cw.Coworker_Id == '\0')
                        break;
                    else if (cw.Coworker_Id == Id)
                        Id++;
                }
 
                Coworkers cowork = new Coworkers//создаём строковое представление
                {
                    Coworker_Id = Id,
                    CoworkerSurname = textBox1.Text,
                    CoworkerName = textBox2.Text,
                    CoworkerFathername = textBox3.Text,
                    CoworkerPosition = textBox4.Text,
                    CoworkerStatus = textBox5.Text,
                    CoworkerLogin = textBox6.Text,
                    CoworkerPassword = textBox7.Text
                    
                };
                
                context.Coworkers1.Add(cowork);//добавляем строку в базу данных
                try
                {
                    context.SaveChanges();//сохраняем изменения
                    this.Close();
                }
                catch (Exception )
                {
                    MessageBox.Show("Ошибка добавления сотрудника", "Информация", MessageBoxButtons.OK);
                }
 
            }
А вот с удалением проблемы. Удаляю выбранную через листвью строку. Делаю аналогичным образом используя только метод .Remove:
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
 int value=0;
            string str;
            ListView.SelectedIndexCollection collection = listView1.SelectedIndices;
            if (collection.Count != 0)
            {
                using (var context = new Database103SQLEntities())
                {
                    foreach (var DelItem in context.Coworkers1)
                    {
                        str = listView1.SelectedItems[0].SubItems[6].Text;
                        value = Convert.ToInt32(str);
                        if (DelItem.Coworker_Id == value)
                        {
                            Coworkers cowork1 = new Coworkers() //создаём строковое представление
                            {
                                Coworker_Id = DelItem.Coworker_Id,
                                CoworkerSurname = DelItem.CoworkerSurname,
                                CoworkerName = DelItem.CoworkerName,
                                CoworkerFathername = DelItem.CoworkerFathername,
                                CoworkerPosition = DelItem.CoworkerPosition,
                                CoworkerStatus = DelItem.CoworkerStatus,
                                CoworkerLogin = DelItem.CoworkerLogin,
                                CoworkerPassword = DelItem.CoworkerPassword
 
                            };
                            context.Coworkers1.Remove(cowork1);  //удаляем строку - компилятор ругается
                            //не удалось удалить объект, поскольку он не найден в ObjectStateManager
                            try
                            {
                                context.SaveChanges(); //сохраняем изменения
                                this.Close();
                            }
                            catch (Exception)
                            {
                                MessageBox.Show("Ошибка удаления сотрудника", "Информация", MessageBoxButtons.OK);
                            }
                            break;
                        }
                    }
                    
                    
                }
                listView1.Items.RemoveAt(collection[0]);
Вероятно я чего-то не понимаю... Перечитал несколько тем на msdn, но там не совсем то, что в моём случае. Заранее благодарен за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2014, 12:55
Ответы с готовыми решениями:

Подключение базы данных Microsoft SQL Server 2012
Всем доброго времени суток. Пишу проект в Visual studio 2013, база данных сделана в Microsoft SQL...

Удаление строки из базы данных sql
я хочу из моей базы данных comments удалить строчку по номеру айди так мне пишут "No database...

Удаление Sql server 2012 Express
Поставил Sql server 2012 Express. По умолчанию не задал имя экземпляру... Он поставлся, но через...

Перенос базы sql server 2012 с сервера на сервер
Есть два сервера на обоих установлен SQL Server 2012 (из 1-го образа), но почему то версия database...

3
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
13.04.2014, 13:34 2
Лучший ответ Сообщение было отмечено lukan2 как решение

Решение

у вас велосипед на велосипеде в коде.
Начнём с того, что вы зачем то задаёте вручную Id. Этого не надо делать.
А удаление у вас вообще шедеврально.

Цитата Сообщение от lukan2 Посмотреть сообщение
C#
1
2
3
4
5
6
foreach (var DelItem in context.Coworkers1)
{
str = listView1.SelectedItems[0].SubItems[6].Text;
value = Convert.ToInt32(str);
if (DelItem.Coworker_Id == value)
{
не нужно никакие циклы использовать чтобы найти элемент по его Id.
У context'a куча методов для поиска объектов как по Id, так и по любому свойству другому (Where, Find, FirstOrDefault..).

Цитата Сообщение от lukan2 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
Coworkers cowork1 = new Coworkers() //создаём строковое представление//WTF??!!
 {
Coworker_Id = DelItem.Coworker_Id,
 CoworkerSurname = DelItem.CoworkerSurname,
CoworkerName = DelItem.CoworkerName,
 CoworkerFathername = DelItem.CoworkerFathername,
CoworkerPosition = DelItem.CoworkerPosition,
CoworkerStatus = DelItem.CoworkerStatus,
 CoworkerLogin = DelItem.CoworkerLogin,
 CoworkerPassword = DelItem.CoworkerPassword
};
Ну хорошо, нашли вы в своём цикле нужный объект в базе, а дальше зачем вы создаёте новый объект с такими же свойствами?
Потратьте пол часа на чтение какого нибудь туториала по EntityFramework, дабы не делать вот таких вот велосипедов.

В вашем случае, чтобы удалить объект, можно сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            ListView.SelectedIndexCollection collection = listView1.SelectedIndices;
            if (collection.Count != 0)
            {
            int idValue=Convert.ToInt32(listView1.SelectedItems[0].SubItems[6].Text);
             using (var context = new Database103SQLEntities())
                {
                        Coworkers coworker=context.Coworkers1.Find(idValue);
                        if(coworker!=null)
                        {
                                 context.Coworkers1.Remove(coworker);
                                 context.SaveChanges();
                                 listView1.Items.RemoveAt(collection[0]);
                        }   
                 }
             }
1
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 16
13.04.2014, 13:48  [ТС] 3
Монфрид, спасибо! Всё очень чётко и рационально!
Выложил просто один из первых вариантов своего кода, т.к. не знал в чём именно причина ошибки. Был бы благодарен Вам, если бы ещё посоветовали хороший туториал по EF, т.к. в msdn отрывками читать очень неудобно.
0
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
13.04.2014, 14:05 4
lukan2, можно это почитать: http://professorweb.ru/my/LINQ... 4/14_1.php
вообще, всё в entityFramework вертится вокруг linq, так что не зная его, будет тяжело что-то делать.
Там вот в статье как раз делаются простые запросы к бд на linq (вставка, выборка, удаление)
1
13.04.2014, 14:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2014, 14:05
Помогаю со студенческими работами здесь

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

Подсоединение базы SQL Server 2012 к C# приложению (Visual Studio 2015)
Делаю проект. Необходимо создать c# приложение, которое будет работать с базой данных. Подобным...

Сохранение данных из datagridview в базу данных под MS sql server 2012
Доброго времени суток. Делаю курсовую, и до этого момента думал, что самое сложное создать...

SQL Server 2012: выборка данных из БД в DataGridView
Добрый день. Помогите пожалуйста, в visual basic у меня есть datagrid делаю новое подключение,...


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

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