从SQL Server表中删除一行

问题描述:

我试图简单地从我的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)); 
     } 
    } 
} 

我不断收到错误:

A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll An error occurred: Operand type clash: text is incompatible with int

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

+2

你应该使用这个参数。 – 2012-03-06 03:07:20

+0

我不确定如何使用参数,任何示例?资源? – ikathegreat 2012-03-06 04:24:23

+1

另外,作为一个附注:首先,你不应该再使用'TEXT' - 从SQL Server 2005开始它已经被弃用了。改用'VARCHAR(MAX)'。另外:拥有**所有列**是'VARCHAR(MAX)'闻起来像一个可怕的设计 - 你真的**需要2 GB的文本**每列** ** ?? **设计和性能提示:使用适当的数据类型 – 2012-03-06 05:50:10

正如你所指出,所有的列名是文本类型的关闭连接,所以,有必要通过在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)); 
     } 
    } 
} 

要么IDNumber应该是int,而不是string,或者如果它真的是一个string,加引号。

更好的是,使用参数。

+0

使用正则引号(“)我回来了:'发生错误:无效的列名称'50012'.'其中50012是IDNumber (字符串) – ikathegreat 2012-03-06 04:23:56

+0

@ikathegreat - 试试kashif的例子,使用参数避免了像这样的数据类型的麻烦,而且,正如其他海报所说的,你几乎肯定不希望所有这些字段都是TEXT。 – 2012-03-06 11:42:28

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

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

this returns :发生错误:数据类型text和varchar在等于运算符中不兼容 – ikathegreat 2012-03-06 04:21:57

你可以改变从TEXTVARCHAR(MAX). TEXT列中的“列名”型不能与"="使用。
see this topic

尝试用放慢参数

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

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

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

无需使用声明

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