指定的转换无效

zlylm 2007-12-21 11:32:32

dim ssnjd() as single
Dim reader As Odbc.OdbcDataReader = command123.ExecuteReader
While reader.Read
sszh(i) = reader.GetString(0)
ssrqsj(i) = reader.GetString(1)
ssnjd(i) = CDbl(reader.GetString(2))'出错行
i = i + 1
End While

数据库中源字段的类型是Float

运行出现错误为:

未处理的“System.InvalidCastException”类型的异常出现在 system.data.dll 中。

其他信息: 指定的转换无效

有时候运行正常错误不会出现,但是他心情不好的时候就不跟我合作了。我实在不知道是怎么回事
请个位帮忙看看,我给加分
到底是什么原因啊?
...全文
296 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlylm 2007-12-25
  • 打赏
  • 举报
回复
好吧。就这么着吧!
给分
zlylm 2007-12-24
  • 打赏
  • 举报
回复
现在就剩下一个问题了,就是怎么才能有效的判断数据是否位空而不出错。
zlylm 2007-12-24
  • 打赏
  • 举报
回复
ssnjd(i) = IIf(reader.GetString(2) = "", 0, CDbl(reader.GetString(2)))
这样写效果是一样的,还是不行
mainbaby 2007-12-24
  • 打赏
  • 举报
回复
考虑在在SQL层面把Null转换成0,而不是设定条件,使数据不为空。例如
select A,B,IsNull(C,0) from XXX ……
C就是你的reader.GetString(2)字段。
mainbaby 2007-12-24
  • 打赏
  • 举报
回复
If Not IsDBNull(reader.GetString(2)) AndAlso reader.GetString(2) <> "" Then
ssnjd(i) = CDbl(reader.GetString(2))
Else
ssnjd(i) = 0
End If
要是这个都不行,偶就真没啥方法了。
zlylm 2007-12-24
  • 打赏
  • 举报
回复
换个方法我的问题是真的解决了,不过关于判断是否为空的方法还不知道啊!
zlylm 2007-12-24
  • 打赏
  • 举报
回复
我决定对查询语句做手脚了,看看能不能解决。
zlylm 2007-12-24
  • 打赏
  • 举报
回复
楼上的方法我试过了,结果还是出现了这个错误

未处理的“System.InvalidCastException”类型的异常出现在 system.data.dll 中。

其他信息: 指定的转换无效。

mainbaby 2007-12-24
  • 打赏
  • 举报
回复
其实只要保证reader.GetString(2)即不为空也不为Null就可以了,如果是就赋0即可。
If reader.GetString(2).ToString.Trim <> "" Then
ssnjd(i) = CDbl(reader.GetString(2))
Else
ssnjd(i) = 0
End If
zlylm 2007-12-24
  • 打赏
  • 举报
回复
问题解决了,只要在查询语句中设定条件,使数据不为空就可以了。
Hesperus 2007-12-21
  • 打赏
  • 举报
回复
VB真是看不懂了
vwxyzh 2007-12-21
  • 打赏
  • 举报
回复
取出来的数据不能转换成数字(例如:DBNull)
zlylm 2007-12-21
  • 打赏
  • 举报
回复
不好意思我写错了。
定义的数组就是double型的
zlylm 2007-12-21
  • 打赏
  • 举报
回复
如果是类型级别,那我要怎么转换才能不出错啊?
kbryant 2007-12-21
  • 打赏
  • 举报
回复
CDbl(reader.GetString(2)) 返回的是double型的数据,直接赋值给single型的不知道行不行

还有reader.GetString(2)从数据库取出的值是什么,是不是有值取出来看一下
zlylm 2007-12-21
  • 打赏
  • 举报
回复
是一组数据 数据类型为Float
那个是我定义的数组
那这个要数组怎么定义啊?
ping502 2007-12-21
  • 打赏
  • 举报
回复
可能是類型的級別問題。。。
zjjxxhn19840204 2007-12-21
  • 打赏
  • 举报
回复
reader.GetString(2)从数据库取出的值是什么啊,另外,
dim ssnjd() as single 定义好像有问题
CloneCenter 2007-12-21
  • 打赏
  • 举报
回复
ssnjd(i) = CDbl(reader.GetString(2))
修改下,判断是否可以转换为数字。
ssnjd(i) = IIf(reader.GetString(2) = "", 0, CDbl(reader.GetString(2)))
vwxyzh 2007-12-21
  • 打赏
  • 举报
回复
""也会报错的
加载更多回复(4)

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧