【问题标题】:SQL connection selecting row to deleteSQL 连接选择要删除的行
【发布时间】:2022-01-09 15:50:51
【问题描述】:

我在 Visual Studio 中有一个本地数据库,在我的项目中,我想删除在 WPF 中选择的行。

这是我目前所得到的:

   private void Delete(object sender, RoutedEventArgs e)
    {
        DataRowView o = (DataRowView)g2.SelectedItem;
        int ID = Convert.ToInt32(o.Row.ItemArray[0]);
        
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=MYFOLDER";    
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd = new SqlCommand("DELETE FROM [STOCK] WHERE o = @ID", con);
         
        cmd.Connection = con;
        cmd.ExecuteNonQuery();
        {
            MessageBox.Show("Row deleted");  
        }

在这个语句中我可以选择一行:

DataRowView o = (DataRowView)g2.SelectedItem;
int ID = Convert.ToInt32(o.Row.ItemArray[0]);

但是我必须从我的本地数据库中删除它,我不知道如何完成。 我知道这个说法是错误的......但什么是正确的:

cmd = new SqlCommand("DELETE FROM [STOCK] WHERE o = @ID", con);

希望有人可以帮助我。 我正在使用 Visual Studio 2019 - 这是一个带有 C# 的 WPF 项目。

【问题讨论】:

  • STOCK表的主键列是什么? ID 的值是多少?
  • 主键为:Id 数据类型:int
  • DELETE FROM [STOCK] WHERE Id = @ID

标签: c# visual-studio select connection sql-delete


【解决方案1】:

您需要参考DELETE 中的ID

还要注意以下几点

  • AttachDbFilename is a bad idea,改为正常附加数据库,使用FOR ATTACH
  • 不要对连接字符串进行硬编码,将其放入设置文件中
  • 需要在命令中添加参数
  • 您应该始终使用using 处理连接和命令等对象
  • 连接打开时不要用消息框阻塞线程
  • 使用try catch 处理错误
private void Delete(object sender, RoutedEventArgs e)
{
    DataRowView o = (DataRowView)g2.SelectedItem;
    int ID = Convert.ToInt32(o.Row.ItemArray[0]);

    try
    {        
        const string query = @"
DELETE FROM [STOCK] WHERE [STOCK].Id = @ID;
";
        using (SqlConnection con = new SqlConnection(Properties.ConnectionString))
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;
            con.Open();
            cmd.ExecuteNonQuery();
        }
        MessageBox.Show("Row deleted");
    }
    catch(Exception ex)
    {
        MessageBox.Show("Error occurred:\r\n" + ex.Message);
    }
}

【讨论】:

  • 谢谢!有用。我将把连接字符串放在一个设置文件中。我猜它也会更容易阅读。再次:非常感谢!
猜你喜欢
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多