读取Float列时,指定的强制转换无效

时间:2013-05-02 18:23:11

标签: asp.net vb.net

好吧,我再次陷入困境。到目前为止,一切都顺利航行。我正在从DB中读取一些数据(通常是这样的),但它给我指定的强制转换是无效的错误。这不是我第一次处理这个错误;早些时候,我有一个日期列。无论如何,我有一张桌子需要阅读。它的数据类型是FLOAT。所以这是我正在使用的代码:

Dim rdr = sqlCmd.ExecuteReader
While rdr.Read
    theResults.Add(New UserData With {
        .BalAvailable = rdr.GetFloat(0),
        .branch = rdr.GetInt32(1)
     })
End While

这是在一个函数下运行;这是班级......

Class UserData
    Dim theResults = New List(Of UserData)

    Property Branch As Integer
    Property BalAvailable As Single

End Class

这是输入部分......

Dim clientNo As Integer = 0
Dim myResults = GetData(clientNo)
If Integer.TryParse(txtInput.Text, clientNo) Then
    If myResults.Count = 1 Then
        txtBalAvail.Text = CInt(myResults(0).BalAvail)
    Else

每次我输入一个值,它给我指定的强制转换无效错误。

System.Data.SqlClient.SqlBuffer.get_Int32() +5270501
System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) +62

我认为这可能与我使用的陈述有关吗?

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

我被困住了。我也尝试将rdr.GetFloat更改为Double,并将Integer.TryParse更改为Double.TryParse。我太困了!

2 个答案:

答案 0 :(得分:0)

强类型Get...方法(GetFloatGetInt32等)只有在字段的数据类型完全匹配时才有效。

使用GetFieldType方法检查字段的实际数据类型,并使用适当的强类型Get...方法或无类型GetValue方法。

答案 1 :(得分:0)

 <asp:BoundField DataField="BILLTOTAL" DataFormatString="{0:n}" 
                            HeaderText="BILL TOTAL" />

  decimal total = dt.AsEnumerable().Sum(row => row.Field<decimal>("BILLTOTAL"));
 GridView1.FooterRow.Cells[3].Text = total.ToString("N2");