簡體   English   中英

刪除和更新查詢在 ADO.NET 中不起作用

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

我正在嘗試使用連接架構的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();
    }

每次我嘗試刪除記錄時,都會執行未刪除的其他條件

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 查詢工作得很好。 我哪里做錯了?

我認為存在任何datatype conversion error ,這就是它沒有刪除的原因,對於更新情況,您只是錯過了傳遞@name,@TextBox_No的參數

請參閱此處為什么要使用Add()

您需要將參數傳遞方法AddWithValue()更改為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();

前言:我對 ASP.NET 一無所知,但我知道 MS Access。 NO保留字 因此,如果使用保留字作為字段引用時可能會導致意外的答案或錯誤。

要解決此問題,請考慮將刪除和更新查詢中的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 vs [NO]列引用。前者返回了零記錄,但后者返回了正確的記錄。

如果它沒有刪除任何記錄,這意味着int res = cmd.ExecuteNonQuery(); 返回 0 或沒有記錄被刪除。 確保WHERE子句中的條件WHERE NO=@number匹配任何記錄。 驗證沿着具有相同條件的線運行選擇

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM