Ich versuche, den Datenbankwert eines Elements, das ich in eine Listbox legte, in das Textfeld anzuzeigen. (vb.net)Wie ändere ich den Datentyp, um den Datentyp nicht zu stimmen in Kriterienausdruck
Meine Datenbank Tabellenname ist 'Productlog', in dieser Tabelle hat 3 Spalten, ProductID, Produktname und Preis. Ich habe den Produktnamen in einer Listbox angezeigt, die ich erstellt habe, jetzt versuche ich, die 3 Spalten in 3 Textfeldern anzuzeigen. Allerdings bekomme ich den Fehler "Datentyp nicht übereinstimmend in Kriterienausdruck" in meiner ExecuteReader-Zeile. Hier ist mein Code ist:
Public Class shop
Dim provider As String
Dim datafile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
Private Sub listboxitems_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles listboxitems.SelectedIndexChanged
Dim lbconn As New OleDb.OleDbConnection("PROVIDER=Microsoft.ACE.Oledb.12.0; Data Source = C:\Users\USER PC\Desktop\orderDB1.accdb")
Dim lbcmd As New OleDb.OleDbCommand("SELECT productid, product, price FROM productlog WHERE productid =' & listboxitems.Text & ' AND product ='" & listboxitems.Text & "' AND price =' & listboxitems.Text & '", lbconn)
Dim lbreader As OleDbDataReader
lbconn.Open()
lbreader = lbcmd.ExecuteReader() 'error appearing right here'
While lbreader.Read
txtproductid.Text = lbreader.GetInt32("productid")
txtproduct.Text = lbreader.GetString("product")
txtprice.Text = lbreader.GetInt32("price")
End While
lbconn.Close()
End Sub
Basierend auf den anderen Fragen, die ich sah, könnte es sein, weil das productid "und‚Preis‘beiden ganzen Zahlen sind und was ich tue, ist für einen String. Ich habe versucht, die doppelten Anführungszeichen ('"& txtproductid.Text"') zu entfernen und sie in 'txtproductid.Text' umzuwandeln, basierend auf einer anderen Frage, die ich nachgeschlagen habe. Die andere Antwort, die ich sah, war die Zeichenfolge in eine Ganzzahl zu konvertieren - 'lbcmd.Parameters.AddwithValue ("@ productid", ConvertInt32 ("txtproductid.Text"))' nicht sicher, ob das korrekt ist, aber ich habe den gleichen Fehler bekommen . Wie kann ich diesen Fehler umgehen? Vielen Dank.
AKTUALISIERT Code:
Private Sub listboxitems_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles listboxitems.SelectedIndexChanged
Using lbconn As New OleDb.OleDbConnection("PROVIDER=Microsoft.ACE.Oledb.12.0; Data Source = C:\Users\USER PC\Desktop\orderDB1.accdb")
Using lbcmd As New OleDb.OleDbCommand("SELECT productid, product, price FROM productlog WHERE productid = ? AND product = ? AND price = ?", lbconn)
'Set your values here. The parameters must be added in the same order that they
'appear in the sql SELECT command
Dim prodidparam As New OleDbParameter("@productid", Me.txtproductid.Text)
Dim prodparam As New OleDbParameter("@product", Me.txtproduct.Text)
Dim priceparam As New OleDbParameter("@price", Me.txtprice.Text)
lbcmd.Parameters.Add(prodidparam)
lbcmd.Parameters.Add(prodparam)
lbcmd.Parameters.Add(priceparam)
'Open the connection
lbconn.Open()
Using lbreader As OleDbDataReader = lbcmd.ExecuteReader()
While lbreader.Read
txtproductid.Text = lbreader.GetInt32("productid").ToString()
txtproduct.Text = lbreader.GetString("product")
txtprice.Text = lbreader.GetInt32("price").ToString()
End While
End Using
End Using
End Using
End Sub
Preis ist eher Dezimal oder Double nicht Int32 – Plutonix
@Plutonix Ich legte 10,15 und 20 auf die Preisspalte auf meine drei Produkte, Wenn es tatsächlich ein Doppel oder ein Dezimal ist, wie würde ich den Datentyp ändern? – JermaineAIT
@Plutonix Ich habe das Try and Catch versucht und es gab keine Fehler mehr. aber ich kann immer noch nicht die Textbox, um die Werte anzuzeigen. – JermaineAIT