为什么我会收到此错误?提供程序无法确定Double值

时间:2015-01-28 17:52:19

标签: sql vb.net double

为什么会出现此错误: 提供程序无法确定Double值。例如,刚刚创建了行,Double列的默认值不可用,并且消费者尚未设置新的Double值。

    ElseIf cb_Stat.Text = "Highest Goal/min" Then
        SQL = "SELECT Goals, Mins_Played, ((Mins_Played * 1.0) / Goals) AS gpm FROM PlayerDatabase"
        Dim da As New OleDbDataAdapter(SQL, Connection)
        da.Fill(ds, "PlayerDatabase")
        lbl_Result.Text = ds.Tables("PlayerDatabase").Rows(0).Item(2)
    End If

    Me.lbl_Result.Left = Me.ClientSize.Width \ 2 - Me.lbl_Result.Width \ 2
    Connection.Close()

1 个答案:

答案 0 :(得分:2)

您的列目标包含零值。在这种情况下,正确的错误消息应为Division by Zero,但Access会返回不是非常有用的错误消息。

尝试使用此查询文字。

Dim cmdText = "SELECT Goals, Mins_Played, " & _
              "iif([Goals] = 0, 0, (([Mins_Played]*1)/[Goals])) AS gpm " & _
              "FROM PlayerDatabase;"

如果您需要并按顺序排序,则应重复用于构建gpm字段的表达式

....
"FROM PlayerDatabase " & _
"ORDER BY (iif([Goals] = 0, 0, (([Mins_Played]*1)/[Goals]))) DESC;"

相反,如果你想从代码中对数据进行排序(因此没有数据库执行两次gpm的计算),你可以编写

da.Fill(ds, "PlayerDatabase")
ds.Tables("PlayerDatabase").DefaultView.Sort = "gpm DESC"
lbl_Result.Text = ds.Tables("PlayerDatabase").DefaultView(0).Item(2)

不确定这是否比数据库引擎执行的排序更好(性能明智)。当您需要订购许多行时,需要对此进行测试。