簡體   English   中英

嘗試更新訪問數據庫中的記錄時出現錯誤

[英]I am getting an error when I try to update records in my access database

我有一個連接到訪問數據庫的小程序,我想要做的是通過編輯表單更新(編輯)選定的記錄。 當我執行代碼時,出現以下錯誤:

System.Data.OleDb.OleDbException was unhandled
  Message=Syntax error (missing operator) in query expression '5346 S. Eubank blvd'.
  Source=Microsoft Access Database Engine
  ErrorCode=-2147217900

不用說,它用於地址字段。

這是我的代碼塊:

private void saveChangeBtn_Click(object sender, EventArgs e)
{
    Customer.SetCustID(Convert.ToInt32(editIdTB.Text));
    Customer.SetFirstName(editFirstNameTB.Text);
    Customer.SetLastName(editFirstNameTB.Text);
    Customer.SetAddress(editAddressTB.Text);
    Customer.SetPhoneNum(editPhoneTB.Text);
    Customer.SetEmail(editEmailTB.Text);

    using (OleDbConnection connect = new OleDbConnection(connectionString))
    {
        OleDbCommand cmd = new OleDbCommand();
        connect.Open();

        cmd.Connection = connect;
        cmd.CommandText = "UPDATE Customers SET [Customer ID]=" + Customer.GetCustId() +
            ", [First Name]=" + Customer.GetFirstName() +
            ", [Last Name]=" + Customer.GetLastName() +
            ", [Address]=" + Customer.GetAddress() +
            ", [Phone Number]=" + Customer.GetPhoneNum() +
            ", [Email Address]=" + Customer.GetEmailAddress() + 
            ", WHERE [Customer ID]=" + editIdTB.Text + "";
        cmd.ExecuteNonQuery();
        connect.Close();
        MessageBox.Show("Changes made successfully!", "Success!", MessageBoxButtons.OK);
    }
    this.Close();
}

我認為您遇到的問題是WHERE之前的逗號。 嘗試刪除它,然后嘗試一下。

如果您可以捕獲正在執行的確切sql並嘗試在查詢瀏覽器中運行它,則診斷起來會更容易。

另外,建議您在構造sql時使用string.format。 為了獲得更好的解決方案,請嘗試使用LINQ to SQL或Entity Framework。

嘗試這個

cmd.CommandText = "UPDATE Customers SET [First Name]='" + Customer.GetFirstName() +
            "', [Last Name]='" + Customer.GetLastName() +
            "', [Address]='" + Customer.GetAddress() +
            "', [Phone Number]='" + Customer.GetPhoneNum() +
            "', [Email Address]='" + Customer.GetEmailAddress() + 
            "' WHERE [Customer ID]=" + editIdTB.Text;

您需要在值兩邊加上引號。 應該可以解決這里的主要問題。

但是,您這里有一個相當大的安全漏洞。 谷歌“ SQL注入”,你會發現一個壞人可以通過將惡意文本放入editIfTB文本框來嚴重破壞你的一周

除了安全漏洞之外,以這種方式構造查詢仍然會存在穩定性問題。 只要您的數據字段之一包含撇號,SQL就會再次中斷(例如,姓O'Neill)。 最佳實踐是通過參數提供所有數據值。 它避免了將所有這些單引號/單引號連接在一起的需要,對數據值不敏感,也沒有安全漏洞。

暫無
暫無

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

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