从SQL Server表中删除一行

我试图使用按钮事件从我的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.dll中发生类型’System.Data.SqlClient.SqlException’的第一次机会exception发生错误:操作数类型冲突:文本与int不兼容

表中的所有列都是TEXT类型。 为什么我不能将string类型的函数参数与列进行比较以找到匹配? (然后删除该行?)

正如你所说的所有列名都是TEXT类型,所以,需要使用IDNumber作为Text,使用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应该是int而不是string ,或者如果它实际上是string ,则添加引号。

更好的是,使用参数。

尝试使用参数

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

无需在using语句中关闭连接

看起来IDNumber是一个字符串。 它需要单引号缠绕它。

 "DELETE FROM " + table + " WHERE " + columnName + " = '" + IDNumber + "'" 

您可以将“columnName”类型从TEXT更改为VARCHAR(MAX). TEXT VARCHAR(MAX). TEXT列不能与"="一起使用。
看到这个主题

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