我正在嘗試查詢 SQL 資料庫,但出現以下錯誤:
拋出了“System.ArgumentOutOfRangeException”型別的例外。(引數'名稱')
請問我該如何解決?
Dim Connection As New SqliteConnection("Data Source = Database.db")
Dim SQLcommand As String = "SELECT * FROM Menu WHERE ItemID = 113"
Dim CMD As New SqliteCommand
Try
CMD.Connection = Connection
Connection.Open()
CMD.CommandText = SQLcommand
Dim reader As SqliteDataReader = CMD.ExecuteReader()
While reader.Read()
Order.Label3.Text = reader(reader("ItemID") & ", " & reader("Name") & ", " & reader("Price"))
End While
reader.Close()
Connection.Close()
Catch e As Exception
MessageBox.Show(e.Message)
End Try
uj5u.com熱心網友回復:
我認為你reader在這條線上有太多的電話:
Order.Label3.Text = reader(reader("ItemID") & ", " & reader("Name") & ", " & reader("Price"))
將其更改為:
Order.Label3.Text = reader("ItemID") & ", " & reader("Name") & ", " & reader("Price")
uj5u.com熱心網友回復:
將用戶界面代碼與資料庫代碼分開。連接、命令和DataReaders 需要Dispose呼叫它們的方法來釋放它們使用的非托管資源。Using塊為我們做這件事。您可以將CommandText和Connection直接傳遞給命令的建構式,而不是一個一個地設定屬性。我填寫了一個DataTable傳遞給 UI 代碼。該DataTable不會也不需要打開的連接的方式DataReader一樣。我將連接字串設為表單級別變數,因為我希望它可以在多個地方使用。
Private OPConStr As String = "Data Source = Database.db"
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim dt As DataTable = Nothing
Try
dt = GetMenuData(113)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
If dt.Rows.Count > 0 Then
Order.Label3.Text = String.Join(", ", {dt(0)("ItemID").ToString, dt(0)("Name").ToString, dt(0)("Price")})
Else
MessageBox.Show("No records returned")
End If
End Sub
Private Function GetMenuData(ID As Integer) As DataTable
Dim SQLcommand As String = "SELECT * FROM Menu WHERE ItemID = 113"
Dim dt As New DataTable
Using Connection As New SQLiteConnection(OPConStr),
CMD As New SQLiteCommand(SQLcommand, Connection)
CMD.Parameters.Add("@ID", DbType.Int32).Value = ID
Connection.Open()
Using reader = CMD.ExecuteReader
dt.Load(reader)
End Using
End Using
Return dt
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/378421.html
