ВС
Варвара Серикова

как удалить определенную строку из БД (код не до конца работающий ниже)?

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);
string inc = dr1["WordID"].ToString();
int i = Convert.ToInt32(inc);
ds1.Tables["main"].Rows.Delete();
string sql = "DELETE FROM tbl_main WHERE Word =" + searchFor;
da.Update(ds1, "main");
MessageBox.Show("Запись успешно удалена! ");
}
}
почему строка нормально удаляется в датасет но из базы не удалена? (происходит ошибка: Динамическое создание SQL для DeleteCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей. )
подскажите лучше вариант удаления строки в которой найдено слово введенное в textbox1 если знаете.

Админ
Админ

Извините, но у вас явное непонимание как работает ADO.NET и в частности класс DataSet
Почитайте тут http://msdn.microsoft.com/ru-ru/library/ss7fbaez(v=vs.80).aspx

ну или обратите внимание, что у вас проблема с Primary key, класс просто не понимает, что ему удалить.

Евгений Ильянов
Евгений Ильянов

Чтобы использовать SqlCommandBuilder, запрос для SqlDataAdapter обязательно должен возвращать ключевые поля:

«Свойство SelectCommand должно также возвратить по крайней мере один столбец первичного ключа или столбец с атрибутом UNIQUE. Если отсутствует и то и другое, то возникнет исключение InvalidOperation и команда сформирована не будет» .

Выход простой: или определить ключевые поля в таблице tbl_main, или не полагаться на автоматику и самому прописать DeleteCommand:

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;

Похожие вопросы
joomla. как удалить БД в joomla
как удалить пустые строки из бд?
Обновление строк в Oracle БД
Как удалить в файле все строки, которые содержат определенное выражение?
Delphi 7. Как удалить определенные строки в Memo1, зная номер строки?
Помогите плз. И так вот в чем прлблема: 1.ввожу в БД новую строку через php код (с помощью INSERT) 2.захожу в БД, смотрю
Ошибка в коде. Строки.
Какая комманда совершает переход на определенную строку кода в Visual Basic?
Как удалить системные таблицы БД из Combobox
почему код не добавляет запись в бд?