【问题标题】:Deleting Specific Data From Database Row (C#)从数据库行中删除特定数据 (C#)
【发布时间】:2015-03-31 21:27:09
【问题描述】:

我正在尝试允许(用户)从数据库中删除数据并将其替换为更新的信息。

我遇到的问题是这样的:

SqlException 未处理:',' 附近的语法不正确。

而且最开始出现这个错误:sqlcmd.ExecuteNonQuery()

这是“应用编辑”按钮的完整代码:

private void applybtn_Click(object sender, EventArgs e)
{
        Connection();
        sqlconnection.Open();

        sqlcmd = new SqlCommand("DELETE Item, Quantity, description, datasheet FROM inventory_table WHERE id= " + ID, sqlconnection);
        sqlcmd.ExecuteNonQuery();

        sqlcmd = new SqlCommand("UPDATE inventory_table SET Item = @Item, Quantity = @Quantity, description = @description, datasheet = @datasheet "+
            "WHERE id= " + ID, sqlconnection);
        sqlcmd.Parameters.AddWithValue("@Item", this.txtbx1.Text);
        sqlcmd.Parameters.AddWithValue("@Quantity", this.txtbx2.Text);
        sqlcmd.Parameters.AddWithValue("@description", this.txtbx3.Text);
        sqlcmd.Parameters.AddWithValue("@datasheet", this.txtbx4.Text);
        sqlcmd.ExecuteNonQuery();

        sqlconnection.Close();    
    }

【问题讨论】:

  • 您不能只删除 SQL Server 表中的几列 - 您只能删除 完整的行。如果您想“删除”某些列 - 您需要使用 UPDATE (table) SET column1 = NULL 或类似的东西
  • 语法错误是由delete命令的语法错误引起的,但您不需要删除该行,因为旧值被传递给更新命令的新值替换
  • 您只需要更新即可将旧值更改为当前值。为什么需要删除?
  • 作为旁注,您可能想看看这篇文章。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
  • 另一件事,永远不要连接字符串然后执行它。始终参数化。

标签: c# sql-server database winforms


【解决方案1】:

试试这个

private void applybtn_Click(object sender, EventArgs e)
{
        Connection();
        sqlconnection.Open();

        sqlcmd = new SqlCommand("DELETE FROM inventory_table WHERE id= " + ID, sqlconnection);
        sqlcmd.ExecuteNonQuery();

        sqlcmd = new SqlCommand("UPDATE inventory_table SET Item = @Item, Quantity = @Quantity, description = @description, datasheet = @datasheet "+
            "WHERE id= " + ID, sqlconnection);
        sqlcmd.Parameters.AddWithValue("@Item", this.txtbx1.Text);
        sqlcmd.Parameters.AddWithValue("@Quantity", this.txtbx2.Text);
        sqlcmd.Parameters.AddWithValue("@description", this.txtbx3.Text);
        sqlcmd.Parameters.AddWithValue("@datasheet", this.txtbx4.Text);
        sqlcmd.ExecuteNonQuery();

        sqlconnection.Close();    
    }

【讨论】:

  • 不要把这个想法连接到最后,请记住始终使用一个参数,否则你会让自己对 sql 注入攻击敞开大门
猜你喜欢
  • 2019-01-24
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2015-10-15
  • 2011-10-30
相关资源
最近更新 更多