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

时间:2015-09-12 07:13:02

标签: c# asp.net ms-access ado.net oledb

我正在尝试使用 OleDbCommand 连接架构

删除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 都会执行,但不会删除。

更新查询相同的问题,

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查询工作正常。 我在哪里做错了?

3 个答案:

答案 0 :(得分:2)

我认为有datatype conversion error,这就是为什么它没有删除,而对于更新案例,您错过了传递@name,@TextBox_No的参数

请参阅此处为何使用Add()

您需要将参数传递方法AddedWithValue()更改为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();
  

并且对于更新,您错过了要传递的参数:

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();

答案 1 :(得分:2)

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

要解决此问题,请考虑将删除和更新查询中的String query = "DELETE FROM TB WHERE [NO] = @number" String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO" 列括起来。

NO

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

答案 2 :(得分:1)

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

SELECT 1 FROM TB WHERE NO=@number

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

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

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

 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);