VB.Net中的SQL计算不起作用

VB.Net中的SQL计算不起作用,sql,vb.net,Sql,Vb.net,这是我所在班级的预习。应该很简单,可以做热身,但我不能让它工作。基本上,代码是引入测试数据库并执行计算。在这种情况下,我试图找到一组棒球运动员的最高平均击球率 因此,我的最终结果应该是打击率最高的球员的名字,或者如果他们平局的话,也可以是一些球员的名字 代码如下: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dt As DataTable = New DataTable(

这是我所在班级的预习。应该很简单,可以做热身,但我不能让它工作。基本上,代码是引入测试数据库并执行计算。在这种情况下,我试图找到一组棒球运动员的最高平均击球率

因此,我的最终结果应该是打击率最高的球员的名字,或者如果他们平局的话,也可以是一些球员的名字

代码如下:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dt As DataTable = New DataTable()
    Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Baseball.accdb"
    Dim sqlStr As String = "SELECT * FROM Players"
    Dim dataAdapter As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sqlStr, connStr)

    dataAdapter.Fill(dt)
    dataAdapter.Dispose()

    Dim average, pastAverage, highestAverage As Double
    For i As Integer = 0 To dt.Rows.Count - 1
        average = CDbl(dt.Rows(i)("hits/atBats"))
        If average > pastAverage Then
            highestAverage = average
        End If
        pastAverage = average
    Next

    For i As Integer = 0 To dt.Rows.Count - 1
        If dt.Rows(i)("hits/atBats") = highestAverage Then
            lstBoxHighest.Items.Add(dt.Rows(i)("name"))
        End If
    Next

  End Sub
End Class
调试器不会超过第一个For循环中的average=Cdbldt.Rowsihits/atBats行。我能不能在循环中做那样的计算?我确信专栏标题hits和atBats是正确的

如果您想知道,数据库如下所示:

name Team atBats hits Derek Jeter New York Yankees 511 158 Joe Mauer Minnesota Twins 545 174 etc...
谢谢

缺少一些对象参照:

average = CDbl(dt.Rows(i).item("hits") / dt.Rows(i).item("atBats"))
其他人也是这样。VB需要一个dt.Rowsi引用,因为这是两个不同的列。对于hits/ATBAT,它无法知道这些是单独的列

简而言之,但它们是不同颜色/物品的面具就像你拥有的一样:

average = CDbl(dt.Rows(i)("hits") / dt.Rows(i)("atBats"))

免责声明:这不是问题的直接答案

不必将所有数据拉到客户端,然后使用两个循环来查找名称,您可以在db端执行所有计算,并仅获取您的案例中所需的行和列,只需使用一个查询命名,该查询可能类似于

选择名称 来自玩家 其中atBats/hits= 选择最大击数/击数 来自玩家 输出:

| NAME | |-------------| | Derek Jeter |
hits是一个列名,atBats是一个列名。我试着用打击数除以打击数来求平均打击率。所以这应该是一个计算。我是否应该尝试通过将SELECT name、hits/atBats作为玩家的击球平均数来创建一个新列?我添加了数据库的外观,以便您可以看到atBats和hits列。实际上,B.Net不需要Item属性。dt.rowshits/dt.RowsiatBats是非常有效的语法。我知道。我明确指出这一点是为了帮助OP了解DT和obj参考文献的内部结构/内容。不过措辞有点错误,谢谢。谢谢!我感到非常沮丧