"算术"操作导致溢出

时间:2015-02-25 17:42:01

标签: sql vb.net oracle

我正在尝试将我的应用程序运行的SQL查询返回的一些信息复制到DataTable进行一些后期处理,然后输出到平面文件。

为此,我尝试使用OracleDataAdapter和OracleDataReader。两者都遇到了查询返回的四个值中的第三个问题。此值是服务器上作业使用的CPU的百分比。通常它返回小于0.1的值。我已经将DataTable的相关列设置为Double,但是当我尝试为该行填充该列时,我被告知“算术运算会导致溢出”。

这没有意义A)因为它是一个直接集dr.Item(c) = odr.Item(c)(dr是我正在填充的表的行,而odr是datareader)。那里没有数学; B)即使我尝试将值转换为String,我也会收到该错误,以便我可以看到它是什么,并尝试根据它找出问题。最后我检查了对String的转换不算算。

生成值的SQL是: (sum(sessioncpu/100)/(119*1*60*60)*100) pct_of_cpu

执行SQL时不会导致错误,并通过Toad返回正常。

查询步骤的完整代码是here (link)。 TableFill函数如下:

 
Public Function TableFill(ByVal odr As Oracle.DataAccess.Client.OracleDataReader, ByVal d As DataStore) As Boolean
    Dim ret As Boolean = False
    Dim c As Integer = 0
    Dim dr As Data.DataRow
    Dim n As String

    Try
        'Check for data
        If odr.HasRows Then
            Do While odr.Read()
                '(Re)Set c and declare new data row
                c = 0
                dr = d.DT.NewRow
                'n = ""

                'Iterate through the columns
                Do While c < odr.VisibleFieldCount
                    n = d.DT.Columns(c).ColumnName
                    'dr.Item(n) = odr.Item(n)
                    If n = "Pct_Of_CPU" Then
                        Dim t As String = odr.Item(c).GetType.ToString
                    End If
                    'n = n & odr.Item(c).ToString

                    dr.Item(c) = odr.Item(c).ToString
                    c = c + 1
                Loop

                'Add dr to the data table
                'd.DT.Rows.Add(dr)
            Loop

            'We've successfully read out all rows, update ret
            ret = True
        Else
            'Report the error
            Me.Errors.Text = "The data reader contained no data to populate the data table with." & Chr(10) & Chr(10) & Me.Errors.Text
            Me.Refresh()
        End If
    Catch ex As Exception
        Me.Errors.Text = "Encountered an error while attempting to capture the query data in a data table. Details: " & ex.Message & Chr(10) & Chr(10) & Me.Errors.Text
        Me.Refresh()
    End Try

    Return ret
End Function

0 个答案:

没有答案