我見過很多參數化SQL查詢的例子,但遇到了幾個問題。參數化的SQL UPDATE語句
我知道我不是哈希密碼,所以請不要這樣。
以下是我的代碼:
cmd.CommandText = "UPDATE users SET [email protected], [email protected], [email protected], [email protected] WHERE ID=" & recordID
cmd.Parameters.AddWithValue("@uName", tbUsername.Text)
cmd.Parameters.AddWithValue("@pWord", tbPassword1.Text)
cmd.Parameters.AddWithValue("@uRole", cbRole.SelectedItem)
cmd.Parameters.AddWithValue("@uActive", isActive)
我得到的錯誤是:
「標準表達式中數據類型不匹配」 我不明白爲什麼,因爲在代碼嘗試運行時,數據庫中的所有內容都是「短字符串」,除了「執行器」設置爲「是/否」並且「isActive」設置爲「是」之外。我已驗證表列標題是準確的,我不知道爲什麼這不起作用。
此格式似乎與INSERT語句一起使用,但不是UPDATE語句......但我無法在此刻確認。
任何幫助,將不勝感激。
編輯:
更新的代碼具有相同的錯誤。
Dim isActive As Boolean = False If cbxActive.CheckState = CheckState.Checked Then isActive = "True" End If cmd.CommandText = "UPDATE users SET [email protected], [email protected], [email protected], [email protected] WHERE [email protected]" cmd.Parameters.AddWithValue("@uName", tbUsername.Text) cmd.Parameters.AddWithValue("@pWord", tbPassword1.Text) cmd.Parameters.AddWithValue("@uRole", cbRole.SelectedItem.ToString()) cmd.Parameters.AddWithValue("@uActive", If(isActive, "Yes", "No")) cmd.Parameters.AddWithValue("@ID", recordID) myConnection.Open() Try cmd.ExecuteNonQuery() Catch ex As OleDb.OleDbException MsgBox(ex.Message) Exit Sub End Try`
SelectedItem正在從組合框的集合返回一個字符串。
這是我的數據庫結構。 Link to Picture of Access DB structure
這是另一種結構圖。 enter image description here
不使用'AddWithValue' - 它使提供者猜測數據類型。 'cbRole.SelectedItem'就是Object。通常有更多的例外情況表明哪種類型會給你一個線索。當然,我們不知道「isActive」是什麼類型 - 聽起來應該是布爾值,但我們不能看到它是聲明。 recordID可以/也應該是一個參數。 – Plutonix
'除了設置爲是/否的「執行器」和「isActive」設置爲「是」之外(如果準確描述的話)。首先,MySql沒有yes/No列類型,通常使用tinyint。但Yes/No是Access-ism,但它只是布爾的另一個名稱。如果你傳遞''Yes'',那是一個不匹配的字符串 – Plutonix
只是猜測,因爲你的代碼不顯示變量或數據庫表的聲明:是'recordId'正確的數據類型? – Robert