好吧,我再次陷入困境。到目前为止,一切都顺利航行。我正在从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。我太困了!
答案 0 :(得分:0)
强类型Get...
方法(GetFloat
,GetInt32
等)只有在字段的数据类型完全匹配时才有效。
使用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");