从SQL Server表中删除一行

问题描述 投票:6回答:7

我想简单地从使用按钮事件我的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.SqlClient.SqlException”出现在system.data.dll的第一次机会异常发生错误:操作数类型冲突:文字是用INT不兼容

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

c# sql-server delete-row
7个回答
17
投票

正如你所指出,所有的列名是文本类型的,因此,有必要通过使用周围的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));
       }
    }
 }

6
投票

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

更重要的是,使用的参数。


3
投票

与参数尝试

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

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

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

无需关闭using语句连接


1
投票

貌似IDNumber中是一个字符串。它需要单引号缠着。

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

1
投票

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


0
投票
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
投票

如果你正在使用MySQL WAMP。此代码的工作。

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);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.