gpt4 book ai didi

mysql - 查询不返回所有记录,需要所有记录

转载 作者:行者123 更新时间:2023-11-29 13:57:57 27 4
gpt4 key购买 nike

我已经编写了一些代码,用于从数据库中检索 3 个单独的列,但由于某种原因,它没有加载查询结果的所有记录。
或者好吧,至少看起来没有这样做。

此外,由于某种原因,它不会向我显示一个消息框,该消息框应该告诉我在阅读器关闭后已读取了多少条记录。

这是我的代码:

Public Class frmPlayerLocations
Dim str(2), loc As String
Dim xx, yy As Integer
Dim itm As ListViewItem
Private Sub frmPlayerLocations_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ListView1.Columns.Add("ID", 60, HorizontalAlignment.Left)
ListView1.Columns.Add("Name", 115, HorizontalAlignment.Left)
ListView1.Columns.Add("Approximate Location", 115, HorizontalAlignment.Left)

Dim qry = "SELECT profile.unique_id, profile.name, survivor.worldspace FROM profile, survivor WHERE survivor.unique_id = profile.unique_id AND survivor.is_dead = '0' ORDER BY profile.name"
Dim connection As MySqlConnection
connection = New MySqlConnection()
connection.ConnectionString = "Host=" & adminPanel.IP & ";port=" & adminPanel.port & ";user=" & adminPanel.username & ";password=" & adminPanel.password & ";database=" & adminPanel.DBname & ";"
connection.Open()
Dim cmd As New MySqlCommand(qry, connection)
Dim reader As MySqlDataReader = cmd.ExecuteReader()
Dim count As Integer = 0
While reader.Read()
count += 1
str(0) = reader.GetString(0)
str(1) = reader.GetString(1)
loc = reader.GetString(2)
loc = Mid(loc, loc.IndexOf(",") + 3)
xx = CInt(Replace(Mid(loc, 1, loc.IndexOf(",")), ".", ",", 1, -1, CompareMethod.Text))
xx = (xx / 10000)
loc = Mid(loc, loc.IndexOf(",") + 2)
yy = CInt(Replace(Mid(loc, 1, loc.IndexOf(",")), ".", ",", 1, -1, CompareMethod.Text))
yy = 152 - (yy / 10000)
If xx < 100 Then
If xx < 10 Then
loc = "00" & xx.ToString & " | "
Else
loc = "0" & xx.ToString & " | "
End If
Else : loc = xx.ToString & " | "
End If
If yy < 100 Then
If yy < 10 Then
loc &= "00" & yy.ToString
Else
loc &= "0" & yy.ToString
End If
Else : loc &= yy.ToString
End If
str(2) = loc
itm = New ListViewItem(str)
ListView1.Items.Add(itm)
End While
reader.Close()
connection.Close()
MessageBox.Show(count)

End Sub
End Class

编辑:我注意到当连续两次调用表单时,第二次我确实收到此错误:

An unhandled exception of type 'System.ArgumentException' occurred in Microsoft.VisualBasic.dll Additional information: Argument 'Length' must be greater or equal to zero.

它引用了这行代码:

yy = CInt(Replace(Mid(loc, 1, loc.IndexOf(",")), ".", ",", 1, -1, CompareMethod.Text))

最后但并非最不重要的一点是,该行代码中使用的值:

    loc "7.305e-04]]"   String
yy 131 Integer

PS:这可能会有所帮助:survivor.worldspace 中的值最初采用以下格式:

[168,[1291.16,5343.54,0.27]]

最佳答案

如果消息框未显示,则最有可能的情况是 while 循环内抛出异常,该异常可能在其他地方悄悄捕获。

不幸的是,在 while 循环中,有太多地方可能会发生异常,因此仅通过查看该代码很难说清楚。它可能试图将 DBNull 转换为字符串,或者索引越界等。

我的建议是使用调试器单步执行并识别有问题的行,或者在 while 循环内放置一个 try catch 并在 catch 内放置一个断点。这应该为您提供有关异常发生的内容(以及发生地点)的信息。

根据您的更新,问题似乎出在传递给 Mid() 函数的参数上。根据您的数据,您似乎正在尝试使用起始索引 1 和结束索引 -1 来获取 loc 的子字符串,这就是 loc.IndexOf(",") 在这种情况下会返回,因为 loc 中没有 ,(逗号)。

您可能想稍微重构一下该代码。特别是,您似乎实际上正在尝试用 , 替换 .,但在尝试后才执行此操作调用Mid()。这似乎是你的问题!

关于mysql - 查询不返回所有记录,需要所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com