我創建了一個訪問資料庫,其中存盤了用戶創建的所有抽認卡。
這里是:

當用戶創建抽認卡時,難度設定為 3,用戶可以通過 txtDifficulty 更改難度
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
runSQL(sql) 'runs SQL
End Sub
上面代碼的問題在于它編輯了資料庫中的每一個抽認卡,而不僅僅是單個抽認卡。
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
sql = sql & "WHERE Front = " & txtFront.Text
runSQL(sql) 'runs SQL
End Sub
我將代碼編輯為上面的代碼,我認為它只會編輯資料庫中 Front 等于 txtfront.text 的位置,txtfront.text 是抽認卡向用戶顯示的文本框,但這只會產生錯誤。
我想知道如何只編輯用戶所在的特定抽認卡。我猜這可能與訪問資料庫中的唯一識別符號有關,但我不確定如何實作它
uj5u.com熱心網友回復:
您“僅編輯資料庫中 Front 等于 txtfront.text 的位置”的想法是個好主意,但將值連接到 SQL 查詢中充滿了潛在的問題。
如果將值作為 SQL 引數傳遞給查詢,則無需擔心在值周圍加上引號,這是問題中代碼的問題之一。
您可以將 SQL 查詢寫在多行上以使其更易于閱讀:查詢中的額外空格是可以的,但沒有空格(問題中的代碼的另一個問題)是一個問題,通常是語法錯誤。
如果將資料庫操作保留在單獨的方法中,它會將代碼的每個部分保留在自己的方法中,這樣更容易確保每個部分都在做它應該做的事情,也更容易維護。
Sub UpdateDifficultyLevel(front As String, difficulty As Integer)
Dim sql = "UPDATE flashcards SET difficulty = ?
WHERE Front = ?"
Using conn As New OleDbConnection("yourConnectionStringHere"),
cmd As New OleDbCommand(sql, conn)
cmd.Parameters.Add("@difficulty", OleDbType.Integer).Value = difficulty
cmd.Parameters.Add("@front", OleDbType.VarWChar).Value = front
conn.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim difficulty As Integer
If Integer.TryParse(TxtDifficulty.Text, difficulty) Then
Dim front = txtFront.Text
UpdateDifficultyLevel(front, difficulty)
Else
' tell user that the difficulty must be a number
End If
End Sub
引數在查詢中用問號表示,您必須按照引數的使用順序添加引數。為每個引數命名(“@front”等)只是為了更容易看出哪個是哪個(如果使用另一個資料庫,如 SQL Server,則實際使用該名稱)。
該Using陳述句確保任何“非托管資源”在使用后都被釋放。
您可能還需要在更新查詢中使用 UserID,但我無法從問題中判斷出這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353631.html
標籤:网络
上一篇:使用執行緒凍結UI
下一篇:路徑中的非法字符(閱讀說明)
