You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WPF项目如何删除选中行并同步到Visual Studio本地SQL数据库

修正方案
  • 你的DELETE语句中WHERE条件误用了C#代码中的变量名o,应该替换为STOCK表中对应存储ID的实际数据库字段名,一般为ID,同时必须给参数@ID赋值,否则执行时会抛出参数缺失异常。

正确的SQL语句及参数赋值写法

cmd = new SqlCommand("DELETE FROM [STOCK] WHERE ID = @ID", con);
// 必须添加参数赋值逻辑
cmd.Parameters.AddWithValue("@ID", ID);

优化后的完整代码(增加资源自动释放、异常处理逻辑)

private void Delete(object sender, RoutedEventArgs e)
{
    // 获取选中行ID的逻辑保持不变
    DataRowView o = (DataRowView)g2.SelectedItem;
    int ID = Convert.ToInt32(o.Row.ItemArray[0]);
    
    // 使用using自动释放数据库连接、命令对象资源,无需手动关闭
    string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=MYFOLDER";
    using (SqlConnection con = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand("DELETE FROM [STOCK] WHERE ID = @ID", con))
    {
        // 给SQL参数赋值
        cmd.Parameters.AddWithValue("@ID", ID);
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Row deleted");
            // 额外建议:删除成功后刷新界面g2的数据源,保证界面和数据库同步
            // 示例:g2.ItemsSource = 你绑定的数据源重新查询后的结果;
        }
        catch (Exception ex)
        {
            MessageBox.Show($"删除失败:{ex.Message}");
        }
    }
}

注意:如果你的STOCK表中ID字段的实际名称不是ID,请把上面SQL语句里的ID替换为你表中对应的实际字段名即可。

内容的提问来源于stack exchange,提问作者Hartjezomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:00