我的学校项目的最后一段代码有问题。我需要从“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粉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
因为前者可能会导致意外问题。我将参数名称更改为以字母开头,以避免出现其他意外问题。