删除和更新查询在 ADO.NET 中不起作用

Delete & Update query doesn't work in ADO.NET

我正在尝试使用 OleDbCommand class 的 Connected Architecture

删除 Access 数据库的记录
using System.Data.OleDb;
using System.Data;

protected void Button2_Click(object sender, EventArgs e)
        {
        String x = "Connection String...";
        OleDbConnection con = new OleDbConnection(x);
        con.Open();


        String query = "Delete FROM TB WHERE NO=@number";
        OleDbCommand cmd = new OleDbCommand(query, con);
        cmd.Parameters.AddWithValue("@number", TextBox2.Text);


        int res = cmd.ExecuteNonQuery();
        if (res > 0)
        {
            Label.Text = "Deleted successfully";
        }
        else
        {
            Label.Text = "Not Deleted";
        }

        con.Close();
    }

每次我尝试删除记录时 Else Condition 被执行但未被删除。

UPDATE 查询相同的问题,

protected void Button3_Click(object sender, EventArgs e)
    {

        String x = "Connection String..";
        OleDbConnection con = new OleDbConnection(x);
        con.Open();


        String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
        OleDbCommand cmd = new OleDbCommand(query, con);

        int res = cmd.ExecuteNonQuery();
        if (res > 0)
        {
            Label.Text = "Updated successfully";
        }
        else
        {
            Label.Text = "Not Updated";
        }
        con.Close();
    }

INSERT 查询工作得很好。 我哪里做错了?

如果它没有删除任何记录,这意味着 int res = cmd.ExecuteNonQuery(); 返回 0 或没有记录被删除。确保 WHERE 子句 WHERE NO=@number 中的条件与任何记录匹配。验证 运行 一个 select 沿线具有相同条件

SELECT 1 FROM TB WHERE NO=@number

此外,尝试在打孔之前修剪文本框数据,如

    cmd.Parameters.AddWithValue("@number", TextBox2.Text.Trim());

如果 NOINT 类型,则在作为参数传递之前将其转换为整数,例如

 cmd.Parameters.AddWithValue("@number", Convert.ToInt32(TextBox2.Text.Trim()));

您的 UPDATE 案例也可以遵循相同的规则。另外,我没有看到您为 UPDATE 查询传递任何参数。您刚刚在发布的代码中跳过了它吗?

    String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
    OleDbCommand cmd = new OleDbCommand(query, con);

我认为有任何 datatype conversion error,这就是它没有删除的原因,对于更新情况,您只是错过了要传递的参数 @name,@TextBox_No

看这里为什么要用Add()

您需要更改参数传递方式AddedWithValue() to Add()

删除:

String query = "Delete FROM TB WHERE NO=@number";
        OleDbCommand cmd = new OleDbCommand(query, con);
        cmd.Parameters.Add("@number", OleDbType.Numeric, 30).Value=TextBox2.Text;

        int res = cmd.ExecuteNonQuery();
        if (res > 0)
        {
            Label.Text = "Deleted successfully";
        }
        else
        {
            Label.Text = "Not Deleted";
        }

        con.Close();

and for Update u missed the parameter to pass:

String x = "Connection String..";
        OleDbConnection con = new OleDbConnection(x);
        con.Open();


        String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO";
        OleDbCommand cmd = new OleDbCommand(query, con);
       cmd.Parameters.Add("@name ", OleDbType.VarChar, 200).Value=your_Name_Variable;//

        cmd.Parameters.Add("@TextBox_NO", OleDbType.Numeric, 30).Value=Your_No_Variable;

        int res = cmd.ExecuteNonQuery();
        if (res > 0)
        {
            Label.Text = "Updated successfully";
        }
        else
        {
            Label.Text = "Not Updated";
        }
        con.Close();

前言:我对 ASP.NET 一无所知,但我知道 MS Access。而 NO 是一个 reserved word。因此,如果使用保留字,在作为字段引用时可能会导致意外的答案或错误。

要解决这个问题,请考虑在删除和更新查询中将 NO 列括起来。

String query = "DELETE FROM TB WHERE [NO] = @number"

String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO"

我可以确认这个解决方案,因为我刚刚在 MS Access 2013 的 SQL 查询中测试了 NO[NO] 列引用。前者返回零记录,但后者返回正确记录。