Heim  >  Fragen und Antworten  >  Hauptteil

So verwenden Sie die OR-Funktion für MySQL-Abfragen in VB.NET

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粉674999420P粉674999420220 Tage vor350

Antworte allen(1)Ich werde antworten

  • P粉434996845

    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 因为前者可能会导致意外问题。我将参数名称更改为以字母开头,以避免出现其他意外问题。

    使用声明 确保需要处理非托管资源的事情得到处理。

    Antwort
    0
  • StornierenAntwort