web-dev-qa-db-fra.com

Supprimer une ligne d'une table SQL Server

J'essaie simplement de supprimer une ligne complète de ma table de base de données SQL Server à l'aide d'un événement de bouton. Jusqu'à présent, aucune de mes tentatives n'a réussi. C'est ce que j'essaie de faire:

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));
       }
    }
}

Je continue à recevoir l'erreur: 

Une exception de première chance du type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll Une erreur est survenue: conflit de type d'opérande: le texte est incompatible avec int

Toutes les colonnes de la table sont de type TEXT. Pourquoi ne puis-je pas comparer l'argument de fonction de type string aux colonnes pour trouver la correspondance? (Et puis supprimez la ligne?)

6
ikathegreat

Comme vous avez indiqué que tous les noms de colonnes sont de type TEXT, vous devez donc utiliser IDNumber en tant que texte en utilisant une citation simple autour de 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));
       }
    }
 }
17
user1082916

IDNumber doit être une int au lieu de string, ou s'il s'agit vraiment d'une string, ajoutez des guillemets.

Mieux encore, utilisez les paramètres.

6
Jon B

Essayer avec paramètre

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

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

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

Pas besoin de fermer la connexion en utilisant statement  

3
Ali

Vous pouvez changer le type "columnName" de TEXT à VARCHAR(MAX). TEXT column ne peut pas être utilisé avec "=".
voir ce sujet

1
lmatt

On dirait que IDNumber est une chaîne. Il faut un guillemet simple autour de lui.

"DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'"
1
sam yi
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);
    }
}
0
robin

Si vous utilisez MySql Wamp. Ce code fonctionne.

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
Miguel