如何使用 OR 函数进行 MySQL 查询 VB.NET
P粉674999420
P粉674999420 2024-03-30 20:23:02
0
1
399

我的学校项目的最后一段代码有问题。我需要从“actuelewerktuigselectie”列中为给定的 ID 选择多个值。然后需要将这些值插入到变量中以便在项目中进一步使用。

我只获取第一个 ID 的值。请参阅下面我现在的代码。 我可以更改什么来修复我的代码以获取所有值?

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()

所有这些代码都是我在几个月内自学的,因为我没有获得完成这个项目所需的课程,但我只是跟着它,并学习了 vb.net 和 MySql 的基础知识.

我的列和变量 ar 为荷兰语。

P粉674999420
P粉674999420

全部回复(1)
P粉434996845

大概您有未知数量的结果,可能最多有 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 因为前者可能会导致意外问题。我将参数名称更改为以字母开头,以避免出现其他意外问题。

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板