我有一個簡單的二十一點遊戲,我試圖通過添加2個簡單的值來更新數據庫。我希望它將用戶名和玩家的分數添加到數據庫中。大酒杯項目無法更新Access數據庫
看的在線教程後,這是我試過的代碼:
Imports System.Data.OleDb
Public Class Form1
'for updating database
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
Private Sub ButtonSaveScore_Click(sender As Object, e As EventArgs) Handles ButtonSaveScore.Click
provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
dataFile = "F:\Documents\Class Documents\CSC289 - K6A - Programming Capstone Project\Project\BlackJack\BlackJack\Scoreboard.accdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "Update [Scores] set [UserName] = '" & playerName & "',[Score] =' " & wins & "' where [ID] = NEW"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
myConnection.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
我得到的錯誤:
one or more variables is not provided
我第一次打的保存按鈕。第二次它打破了應用程序,它說我「不能調整文件目前的狀態已經打開,然後它突出myConnection.ConnectionString = connString
你忘了'around'NEW',所以它認爲它是一個列名,對於訪問表中沒有找到的所有名稱都是參數。 – litelite
此外,您的代碼有[SQL注入](https://stackoverflow.com/questions/601300/what-is-sql-injection)的風險,您應該使用具有適當參數的預準備語句。 – litelite
你的第二個問題。這是因爲您必須在嘗試重新打開數據庫之前關閉數據庫。目前只有在查詢沒有拋出任何東西時才關閉數據庫。您應該將連接關閉到['Finally'塊](https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/try-catch-finally-statement)。或者,您可以使用['使用'塊](https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/using-statement) – litelite