Heim > Fragen und Antworten > Hauptteil
Ich habe ein Problem mit dem letzten Codestück für mein Schulprojekt. Ich muss mehrere Werte für eine bestimmte ID aus der Spalte „actuelewerktuigselectie“ auswählen. Diese Werte müssen dann zur weiteren Verwendung im Projekt in Variablen eingefügt werden.
Ich erhalte nur den Wert der ersten ID. Siehe unten meinen aktuellen Code. Was kann ich ändern, um meinen Code zu korrigieren und alle Werte zu erhalten?
Dim sCnnStr As String = My.Settings.sCnnStr Dim oCnn As New MySqlConnection(sCnnStr) Dim sSql As String = "select pfProfielfreesnummer, pfLopendemeters from actuelewerktuigselectie where (awsId=@1 OR awsId=@2 OR awsId=@3 OR awsId=@4 OR awsId=@5 OR awsId=@6 OR awsId=@7 OR awsId=@8)" Dim oCmd As MySqlCommand = New MySqlCommand(sSql, oCnn) oCmd.Parameters.AddWithValue("@1", 5) oCmd.Parameters.AddWithValue("@2", 6) oCmd.Parameters.AddWithValue("@3", 7) oCmd.Parameters.AddWithValue("@4", 8) oCmd.Parameters.AddWithValue("@5", 17) oCmd.Parameters.AddWithValue("@6", 18) oCmd.Parameters.AddWithValue("@7", 19) oCmd.Parameters.AddWithValue("@8", 20) oCnn.Open() Dim myReader As MySqlDataReader myReader = oCmd.ExecuteReader() While (myReader.Read()) werktuignummer1 = (myReader.GetString(0)) LopendeMeters1 = (myReader.GetDouble(1)) werktuignummer2 = (myReader.GetString(2)) LopendeMeters2 = (myReader.GetDouble(3)) werktuignummer3 = (myReader.GetString(4)) LopendeMeters3 = (myReader.GetDouble(5)) werktuignummer4 = (myReader.GetString(6)) LopendeMeters4 = (myReader.GetDouble(7)) werktuignummer5 = (myReader.GetString(8)) LopendeMeters5 = (myReader.GetDouble(9)) werktuignummer6 = (myReader.GetString(10)) LopendeMeters6 = (myReader.GetDouble(11)) werktuignummer7 = (myReader.GetString(12)) LopendeMeters7 = (myReader.GetDouble(13)) werktuignummer8 = (myReader.GetString(14)) LopendeMeters8 = (myReader.GetDouble(15)) End While myReader.Close() oCnn.Close()
Diesen ganzen Code habe ich mir in ein paar Monaten selbst beigebracht, weil ich nicht die Kurse bekommen habe, die ich brauchte, um dieses Projekt abzuschließen, sondern ich habe ihn einfach befolgt und die Grundlagen von vb.net und MySql gelernt.
Meine Spalten und Variablen sind auf Niederländisch.
P粉4349968452024-03-31 15:56:23
大概您有未知数量的结果,可能最多有 8 个结果。因此,最好使用某种东西来存储结果,可以根据需要扩展其存储空间,以容纳从查询返回的尽可能多的结果:您可以使用 List 为此,只要您创建一些可以包含所有内容的列表查询中返回的每个行的数据 - 该内容可以是具有保存每个变量的属性的类。查看我建议的代码可能比解释它更容易:
Public Class ToolDatum Public Property ToolID As String Public Property LopendeMeter As Double Public Sub New() ' Empty constructor End Sub Public Sub New(werktuignummer As String, LopendeMeter As Double) Me.ToolID = werktuignummer Me.LopendeMeter = LopendeMeter End Sub End Class Public Function GetData() As List(Of ToolDatum) Dim toolData As New List(Of ToolDatum) Dim connStr As String = My.Settings.sCnnStr Dim sql As String = "SELECT pfProfielfreesnummer, pfLopendemeters FROM actuelewerktuigselectie WHERE (awsId = @P1 OR awsId = @P2 OR awsId = @P3 OR awsId = @P4 OR awsId = @P5 OR awsId = @P6 OR awsId = @P7 OR awsId = @P8)" Using conn = New MySqlConnection(connStr), cmd = New MySqlCommand(sql, conn) cmd.Parameters.Add("@P1", MySqlDbType.Int32).Value = 5 cmd.Parameters.Add("@P2", MySqlDbType.Int32).Value = 6 cmd.Parameters.Add("@P3", MySqlDbType.Int32).Value = 7 cmd.Parameters.Add("@P4", MySqlDbType.Int32).Value = 8 cmd.Parameters.Add("@P5", MySqlDbType.Int32).Value = 17 cmd.Parameters.Add("@P6", MySqlDbType.Int32).Value = 18 cmd.Parameters.Add("@P7", MySqlDbType.Int32).Value = 19 cmd.Parameters.Add("@P8", MySqlDbType.Int32).Value = 20 conn.Open() Using myReader = cmd.ExecuteReader() While (myReader.Read()) toolData.Add(New ToolDatum(myReader.GetString(0), myReader.GetDouble(1))) End While End Using End Using Return toolData End Function
函数 GetData(您应该给它一个描述性名称)将返回一个列表,您可以迭代该列表以获取每个单独的结果,例如
Dim q = GetData() For Each r In q Console.WriteLine(r.ToolID & " " & r.LopendeMeter) Next
我将 AddWithValue
更改为 Add
因为前者可能会导致意外问题。我将参数名称更改为以字母开头,以避免出现其他意外问题。