Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33

Удаление строки в БД, которая содержит слово, введенное в textBox

19.12.2012, 21:56. Показов 4674. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! У меня есть таблица в БД sql со строками, мне надо удалить строку, которая содержит слово введенное в textBox1. Как это сделать? Могу удалить строку по ID но он не всегда совпадает с нужной строкой. Поэтому удаление по id не подходит. Извини если вопрос тупой, я еще новичок. Проект который делаю словарь, мне надо реализовать удаление слов с БД. Dictionary.mdf моя БД
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2012, 21:56
Ответы с готовыми решениями:

Строки. Написать программу, которая введенное с клавиатуры слово напечатает следующим образом
Написать программу, которая введенное с клавиатуры слово напечатает следующим образом: школа к л о о л к алокш

Проверить содержит ли строка введенное слово
Ввести строку, состоящую из нескольких слов, разделенных одним или несколькими пробелами. Проверить содержит ли строка введенное слово.

Определить содержит ли текст введенное слово
Дан файл содержащий производный текст. Определить содержит ли текст введенное слово. Напишите пожалуйста подробную программу , если можно...

15
9 / 9 / 3
Регистрация: 13.09.2012
Сообщений: 55
20.12.2012, 09:35
По-моему, нужно просто составить SQL-запрос с применением фильтра с LIKE - в маске указать нужное слово (Учитывая, что Вы можете удалить строку по ID, это не должно стать проблемой).
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 10:51  [ТС]
ID ведь не всегда идут по порядку
0
9 / 9 / 3
Регистрация: 13.09.2012
Сообщений: 55
20.12.2012, 11:02
А как именно Вы удаляете строку по ID? Приведите кусок кода, если возможно.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 11:04
Способов, на самом деле, много. Но для их реализации нужно знать, что вы используете в свой программе. Вот, пожалуй, один из самых универсальных:
C#
1
2
foreach(DataRow dr in myDataTable.Select("[StringField] Like '%" + TextBox1.Text + "%'"))
    dr.Delete();
, где вместо myDataTable должна быть ваша таблица, а вместо [StringField] должно быть поле, по которому вы осуществляете поиск. Цикл foreach Использован на случай, если в вашей таблице есть несколько строк, содержащих искомый текст.
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 11:14  [ТС]
Цитата Сообщение от Errantry Посмотреть сообщение
А как именно Вы удаляете строку по ID? Приведите кусок кода, если возможно.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string searchFor = textBox1.Text;
            #region x
            int results = 0;
            DataRow[] returnedRows;
            returnedRows = ds1.Tables["main"].Select("Word='" + searchFor + "'");
            results = returnedRows.Length;
            if (results > 0)
            {
                DataRow dr1 = returnedRows[0];
                if (MessageBox.Show("Удалить слово: " + dr1["Word"].ToString(), "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    System.Data.SqlClient.SqlCommandBuilder cb;
                    cb = new System.Data.SqlClient.SqlCommandBuilder(da);
                    string inc = dr1["WordID"].ToString();
                    int i = Convert.ToInt32(inc);
                    ds1.Tables["main"].Rows[i].Delete();
                    da.Update(ds1, "main");
                    MessageBox.Show("Запись успешно удалена!");
                }
            }
            
            #endregion
Добавлено через 2 минуты
Цитата Сообщение от kodv Посмотреть сообщение
Способов, на самом деле, много. Но для их реализации нужно знать, что вы используете в свой программе. Вот, пожалуй, один из самых универсальных:
C#
1
2
foreach(DataRow dr in myDataTable.Select("[StringField] Like '%" + TextBox1.Text + "%'"))
    dr.Delete();
, где вместо myDataTable должна быть ваша таблица, а вместо [StringField] должно быть поле, по которому вы осуществляете поиск. Цикл foreach Использован на случай, если в вашей таблице есть несколько строк, содержащих искомый текст.
Я пишу слвоарь. Мне надо чтобы в нем была возможность админу через интерфейс добавлять сова, редактировать и удалять. Вот у меня с редактированием и удалением пока проблемы.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 11:15
Oskar92, В вашем примере вам никто не мешает .азменить строку
C#
1
ds1.Tables["main"].Rows[i].Delete();
на строку
C#
1
dr1.Delete();
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 11:19  [ТС]
da.Update(ds1, "main"); тоже не нужная строка? то есть dr1.Delete(); сразу из БД удалит мне строку?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 11:22
Цитата Сообщение от Oskar92 Посмотреть сообщение
da.Update(ds1, "main"); тоже не нужная строка? то есть dr1.Delete(); сразу из БД удалит мне строку?
Как раз эта нужна. Не нужны те, где вы ищите ид нужной строки. А этим апдейтом вы применяете изменения к базе данных.

Добавлено через 1 минуту
Если вы про мой первый пример, то он предполагает, что выполнения комманды Update будет когда то потом, когда админ ненужное удалит, нужное добавит, не правильное отредактирует и решит применить разом все изменения к базе данных.
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 11:32  [ТС]
Динамическое создание SQL для DeleteCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей. ВОТ ТАКАЯ ОШИБКА ВОЗНИКАЕТ В СТРОКЕ da.Update(ds1, "main");
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 11:38
Oskar92, Скорее всего у вас таблица на базе без первичного ключа. Проверьте. Либо же инициализируйте DeleteCommand вручную, что будет лучше, ибо она будет работать именно так, как вы этого хотите, а не как за вас решил C#.
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 11:54  [ТС]
что мне делать со столбцом ключевым?

Добавлено через 15 минут
Цитата Сообщение от kodv Посмотреть сообщение
Oskar92, Скорее всего у вас таблица на базе без первичного ключа. Проверьте. Либо же инициализируйте DeleteCommand вручную, что будет лучше, ибо она будет работать именно так, как вы этого хотите, а не как за вас решил C#.
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
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("DELETE FROM tbl_main WHERE Word = @Word", con); 
command.Parameters.Add("@Word", System.Data.SqlDbType.NVarChar, 50, "Word"); // Поставить правильные тип и размер поля Word 
da.DeleteCommand = command;
вот только не знаю где же правильно вставить этот код.
вот весь код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Dictionary
{
    public partial class DeleteWord : Form
    {
        public DeleteWord()
        {
            InitializeComponent();
        }
        System.Data.SqlClient.SqlConnection con;
        DataSet ds1;
        System.Data.SqlClient.SqlDataAdapter da;
        private void DeleteWord_Load(object sender, EventArgs e)
        {
            con = new System.Data.SqlClient.SqlConnection();
            ds1 = new DataSet();
            con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\курсовая\\Dictionary.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            con.Open();
            string sql = "SELECT * From tbl_main";
            da = new System.Data.SqlClient.SqlDataAdapter(sql, con);
            da.Fill(ds1, "main");
            con.Close();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string searchFor = textBox1.Text;
            int results = 0;
            DataRow[] returnedRows;
            returnedRows = ds1.Tables["main"].Select("Word='" + searchFor + "'");
            results = returnedRows.Length;
            if (results > 0)
            {
                DataRow dr1 = returnedRows[0];
                if (MessageBox.Show("Удалить слово: " + dr1["Word"].ToString(), "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    System.Data.SqlClient.SqlCommandBuilder cb;
                    cb = new System.Data.SqlClient.SqlCommandBuilder(da);
                    dr1.Delete();
                    da.Update(ds1, "main");
                    MessageBox.Show("Запись успешно удалена!");
                }
            }
       }
    }
}
Добавлено через 51 секунду
Цитата Сообщение от kodv Посмотреть сообщение
Oskar92, Скорее всего у вас таблица на базе без первичного ключа. Проверьте. Либо же инициализируйте DeleteCommand вручную, что будет лучше, ибо она будет работать именно так, как вы этого хотите, а не как за вас решил C#.
мне сделать таблицу без ключа надо?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 12:00
Oskar92, Во-первых, код можно и нужно обрамлять специальными тегами, которые ставятся при нажатие кнопки C# при наборе сообщения.

Цитата Сообщение от Oskar92 Посмотреть сообщение
вот только не знаю где же правильно вставить этот код.
Главное, чтобы после создания адаптера, и до использования его команды для удаления элементов. Я бы предложил его вставить после этой строки:
C#
1
da = new System.Data.SqlClient.SqlDataAdapter(sql, con);
Цитата Сообщение от Oskar92 Посмотреть сообщение
мне сделать таблицу без ключа надо?
Наоброт. Вам нужен первичный ключ. Если он отсутствует на базе, то вам нужно создать его там(технология создания может отличаться в разных базах, поэтому не буду здесь писать, как).
1
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 12:41  [ТС]
kodv, такой вопрос. Вот в строке command.Parameters.Add("@Word", System.Data.SqlDbType.NVarChar, 50, "Word"); 50 это я так понимаю цифра из nvarchar(50), а если у меня использовано nvarchar то что тогда писать?

Добавлено через 10 минут
Цитата Сообщение от Oskar92 Посмотреть сообщение
Скорее всего у вас таблица на базе без первичного ключа. Проверьте. Либо же инициализируйте DeleteCommand вручную, что будет лучше, ибо она будет работать именно так, как вы этого хотите, а не как за вас решил C#.
можете помочь с этим кодом? просто я недопонимаю как его сделать.
У меня не получается удалить из базы строку.

Добавлено через 12 минут
Цитата Сообщение от kodv Посмотреть сообщение
Способов, на самом деле, много. Но для их реализации нужно знать, что вы используете в свой программе. Вот, пожалуй, один из самых универсальных:
C#
1
2
foreach(DataRow dr in myDataTable.Select("[StringField] Like '%" + TextBox1.Text + "%'"))
    dr.Delete();
, где вместо myDataTable должна быть ваша таблица, а вместо [StringField] должно быть поле, по которому вы осуществляете поиск. Цикл foreach Использован на случай, если в вашей таблице есть несколько строк, содержащих искомый текст.
при использовании этого кода выходит ошибка:
The type arguments for method 'System.Linq.Enumerable.Select<TSource,T Result>(System.Collections.Generic.IEnum erable<TSource>, System.Func<TSource,int,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
20.12.2012, 12:43
Цитата Сообщение от Oskar92 Посмотреть сообщение
Вот в строке command.Parameters.Add("@Word", System.Data.SqlDbType.NVarChar, 50, "Word"); 50 это я так понимаю цифра из nvarchar(50), а если у меня использовано nvarchar то что тогда писать?
У вас создается параметр типа nvarchar(50). Если вы так и хотите, то у вас все задается правильно.

Цитата Сообщение от Oskar92 Посмотреть сообщение
можете помочь с этим кодом? просто я недопонимаю как его сделать.
Лучше написать так:
SQL
1
DELETE FROM tbl_main WHERE WordId = @WordId
Соответственно, нужно будет создавать параметр не @Word с типом nvarchar(50), а @WordId с типом int (System.Data.SqlDbType.Int при добавлении параметра в C#), в поле SourceColumn которого нужно будет прописать "WordId". И еще, в инструкции Select, лучше тоже явно указывать загружаемые строки, а не ставить звездочку.
0
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 33
20.12.2012, 13:10  [ТС]
Цитата Сообщение от kodv Посмотреть сообщение
У вас создается параметр типа nvarchar(50). Если вы так и хотите, то у вас все задается правильно.
у меня создается параметр nvarchar(MAX) вот в чем у меня проблема.

Добавлено через 1 минуту
Цитата Сообщение от kodv Посмотреть сообщение

SQL
1
DELETE FROM tbl_main WHERE WordId = @WordId
Соответственно, нужно будет создавать параметр не @Word с типом nvarchar(50), а @WordId с типом int (System.Data.SqlDbType.Int при добавлении параметра в C#), в поле SourceColumn которого нужно будет прописать "WordId". И еще, в инструкции Select, лучше тоже явно указывать загружаемые строки, а не ставить звездочку.
Понимаю что это неправильно. но можете в тот код что я скинул дописать как надо строки? просто мне работу сдавать через два часа а я додуматься не могу.

Добавлено через 17 минут
Как исправить код чтобы она не столбец искал?
C#
1
2
3
4
foreach (DataRow dr in  ds1.Tables["main"].Select("Word=" + textBox1.Text))
            {
                dr.Delete();
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2012, 13:10
Помогаю со студенческими работами здесь

Скопировать из файла F1 в файл F2 все строки, кроме той, которая содержит самое короткое слово
Скопировать из файла F1 в файл F2 все строки, кроме той строки, которая содержит самое короткое слово. Напечатать номер этой строки.

Как в открытом текстовом файле найти слово и удалить строку которая содержит это слово?
Как в открытом текстовом файле найти слово и удалить строку которая содержит это слово? C#

Определить, содержит ли последнее слово строки букву, с которой начинается первое слово
2.) В динамической памяти размещена строка символов. Определить, содержит ли последнее слово строки букву, с которой начинается первое...

Составить программу, которая обращает введенное слово
3.Составить программу, которая обращает введенное слово, т.е. переставляет символы в обратном порядке За любой совет и комментарий...

Составить программу, которая обращает введенное слово
2. Составить программу, которая обращает введенное слово, т.е. переставляет символы в слове в обратном порядке. Например, мама - амам; Петя...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru