我正在尝试将我的应用程序运行的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