recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser la fonction OR pour les requêtes MySQL VB.NET

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粉674999420P粉674999420240 Il y a quelques jours369

répondre à tous(1)je répondrai

  • P粉434996845

    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.

    Utilisez des déclarations pour garantir que les éléments qui doivent gérer des ressources non gérées sont pris en charge.

    répondre
    0
  • Annulerrépondre