【问题标题】:C# Delete selected row from datagrid and database [duplicate]C#从数据网格和数据库中删除选定的行[重复]
【发布时间】:2014-01-27 11:24:06
【问题描述】:

如果这是一个普通问题或缺乏信息,请提前道歉,我是软件开发和堆栈溢出社区的新手。

为了澄清目的:

  • 我在 SQL Server 2012 中使用 AdventureWorks 示例数据库,并创建了一个名为 Users 的表。
  • 我正在使用 C#

我试图实现的目标和问题的概述:

用户应该能够在 datagridview 中选择一行并选择删除按钮以从数据库中删除所选用户。运行我的代码时,该行会从 datagridview 中删除,但不会从数据库中删除,并且在刷新 datagridview 时,记录会返回,我不太确定我哪里出错了..

    private void btnDelete_Click(object sender, EventArgs e)
    {
        delete_record();

        SqlConnection conn = new SqlConnection();
        SqlCommand delcmd = new SqlCommand();
        conn.ConnectionString = "server=localhost;Trusted_connection=yes;database=AdventureWorks2012";
        conn.Open();

        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Users", conn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dbgrid1.DataSource = dt;
        conn.Close();
    }


    private void delete_record()
    {
        SqlConnection conn = new SqlConnection();
        SqlCommand delcmd = new SqlCommand();
        conn.ConnectionString = "server=localhost;Trusted_connection=yes;database=AdventureWorks2012";
        if (dbgrid1.Rows.Count > 1 && dbgrid1.SelectedRows[0].Index != dbgrid1.Rows.Count - 1)
        {
            delcmd.CommandText = "DELETE FROM Users WHERE ID=" + dbgrid1.SelectedRows[0].Cells[0].Value.ToString() + "";
            conn.Open();
            delcmd.Connection = conn;
            delcmd.ExecuteNonQuery();
            conn.Close();
            dbgrid1.Rows.RemoveAt(dbgrid1.SelectedRows[0].Index);
            MessageBox.Show("deleted");
        }
    }

【问题讨论】:

    标签: c# sql datagridview


    【解决方案1】:

    在你的代码中

    dbgrid1.Rows.RemoveAt(dbgrid1.SelectedRows[0].Index);
    

    上面的代码从网格中删除数据,并且工作正常

    但下面的代码不能正常工作(即删除行的 SQL 查询)

    delcmd.CommandText = "DELETE FROM Users WHERE ID=" + dbgrid1.SelectedRows[0].Cells[0].Value.ToString() + "";
    

    意思是,你取的dbgrid1.SelectedRows[0].Cells[0].Value.ToString()的ID是错误的。

    在 Watch 窗口中查看,看看那里有什么价值。

    【讨论】:

    • 感谢您的快速回复,我已经确定了问题,因为传入的行ID与数据库中的ID字段不一样。 ID 字段是一个自增整数。是否可以通过行 ID 删除记录?我尝试了以下方法: \code\ SqlParameter paramid = new SqlParameter("@ID", SqlDbType.Int); paramid.Value = dbgrid1.SelectedRows[0].Index.ToString(); delcmd.Parameters.Add(paramid); delcmd.CommandText = "从用户那里删除 row_number() over (order by id)=@ID"; \代码\
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多