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?)
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));
}
}
}
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.
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
Vous pouvez changer le type "columnName" de TEXT
à VARCHAR(MAX). TEXT
column ne peut pas être utilisé avec "="
.
voir ce sujet
On dirait que IDNumber est une chaîne. Il faut un guillemet simple autour de lui.
"DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'"
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);
}
}
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);
}
}