Maison > Questions et réponses > le corps du texte
J'ai un problème avec le dernier morceau de code de mon projet scolaire. Je dois sélectionner plusieurs valeurs pour un identifiant donné dans la colonne "actuelewerktuigselectie". Ces valeurs doivent ensuite être insérées dans des variables pour une utilisation ultérieure dans le projet.
Je n'obtiens que la valeur du premier identifiant. Voir ci-dessous mon code actuel. Que puis-je changer pour corriger mon code et obtenir toutes les valeurs ?
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()
Tout ce code, je l'ai appris moi-même en quelques mois car je n'ai pas suivi les cours dont j'avais besoin pour mener à bien ce projet, mais je l'ai simplement suivi et j'ai appris les bases de vb.net et MySql.
Mes colonnes et variables sont en néerlandais.
P粉4349968452024-03-31 15:56:23
Vraisemblablement, vous avez un nombre inconnu de résultats, éventuellement jusqu'à 8 résultats. Il est donc préférable d'utiliser quelque chose pour stocker les résultats, dont le stockage peut être étendu selon les besoins pour accueillir autant de résultats renvoyés par la requête : vous pouvez utiliser une Liste pour cela, à condition de créer quelque chose qui puisse contenir tout. renvoyé pour chaque ligne d'une requête de liste - il peut s'agir d'une classe avec des propriétés contenant chaque variable. Il est probablement plus facile de regarder le code que j'ai suggéré que de l'expliquer :
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
La fonction GetData (vous devez lui donner un nom descriptif) renverra une liste que vous pourrez parcourir pour obtenir chaque résultat individuel, comme
Dim q = GetData() For Each r In q Console.WriteLine(r.ToolID & " " & r.LopendeMeter) Next
Je le ferai AddWithValue
更改为 Add
car le premier peut causer des problèmes inattendus. J'ai modifié les noms des paramètres pour qu'ils commencent par une lettre afin d'éviter d'autres problèmes inattendus.