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