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
相关产品推荐
相关产品推荐

