Удалить строку из таблицы SQL Server - PullRequest
6 голосов
/ 06 марта 2012

Я пытаюсь просто удалить полную строку из моей таблицы базы данных SQL Server, используя событие кнопки.Пока что ни одна из моих попыток не увенчалась успехом.Вот что я пытаюсь сделать:

public static void deleteRow(string table, string columnName, string IDNumber)
{
    try
    {
    using (SqlConnection con = new SqlConnection(Global.connectionString))
    {
         con.Open();
         using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + IDNumber, con))
         {
               command.ExecuteNonQuery();
         }
         con.Close();
    }
    }
    catch (SystemException ex)
       {
       MessageBox.Show(string.Format("An error occurred: {0}", ex.Message));
       }
    }
}

Я получаю сообщение об ошибке:

Произошло первое исключение типа «System.Data.SqlClient.SqlException».в System.Data.dll Произошла ошибка: тип операнда clash: текст несовместим с int

Все столбцы в таблице имеют тип TEXT.Почему я не могу сравнить аргумент функции типа string со столбцами, чтобы найти совпадение?(А потом удалить строку?)

Ответы [ 7 ]

17 голосов
/ 06 марта 2012

Поскольку вы указали, что все имена столбцов имеют тип TEXT, поэтому необходимо использовать IDNumber в качестве текста, используя одинарные кавычки вокруг IDNumber .....

    public static void deleteRow(string table, string columnName, string IDNumber)
    {
    try
    {
    using (SqlConnection con = new SqlConnection(Global.connectionString))
    {
         con.Open();
         using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber+"'", con))
         {
               command.ExecuteNonQuery();
         }
         con.Close();
    }
    }
    catch (SystemException ex)
       {
       MessageBox.Show(string.Format("An error occurred: {0}", ex.Message));
       }
    }
 }
6 голосов
/ 06 марта 2012

Либо IDNumber должно быть int вместо string, либо, если это действительно string, добавить кавычки.

Еще лучше, используйте параметры.

3 голосов
/ 06 марта 2012

Попробуйте с параметром

.....................
.....................

    using (SqlCommand command = new SqlCommand("DELETE FROM " + table + " WHERE " + columnName + " = " + @IDNumber, con))
             {
                   command.Paramter.Add("@IDNumber",IDNumber)
                   command.ExecuteNonQuery();
             }

.....................
.....................

Нет необходимости закрывать соединение при использовании оператора

1 голос
/ 06 марта 2012

Вы можете изменить тип «columnName» с TEXT на VARCHAR(MAX). TEXT. Столбец нельзя использовать с "=".
см. Эту тему

1 голос
/ 06 марта 2012

Похоже, IDNumber является строкой. Ей нужна одинарная кавычка.

"DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'"
0 голосов
/ 17 января 2019

Если вы используете MySql Wamp.Этот код работает.

string con="SERVER=localhost; user id=root; password=; database=dbname";
public void delete()
{
try
{
MySqlConnection connect = new MySqlConnection(con);
MySqlDataAdapter da = new MySqlDataAdapter();
connect.Open();
da.DeleteCommand = new MySqlCommand("DELETE FROM table WHERE ID='" + ID.Text + "'", connect);
da.DeleteCommand.ExecuteNonQuery();

MessageBox.Show("Successfully Deleted");
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
0 голосов
/ 07 ноября 2015
private void button4_Click(object sender, EventArgs e)
{
    String st = "DELETE FROM supplier WHERE supplier_id =" + textBox1.Text;

    SqlCommand sqlcom = new SqlCommand(st, myConnection);
    try
    {
        sqlcom.ExecuteNonQuery();
        MessageBox.Show("delete successful");
    }
    catch (SqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
}



private void button6_Click(object sender, EventArgs e)
{
    String st = "SELECT * FROM suppliers";

    SqlCommand sqlcom = new SqlCommand(st, myConnection);
    try
    {
        sqlcom.ExecuteNonQuery();
        SqlDataReader reader = sqlcom.ExecuteReader();
        DataTable datatable = new DataTable();
        datatable.Load(reader);
        dataGridView1.DataSource = datatable;
    }
    catch (SqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
}
...