请看下列代码,有查出错误者,高分回报!!!
不明白是什么原因,是DBNull涵数使用错误???
错误提示:Cast from type 'DBNull' to type 'String' is not valid.
代码:
TextBox2.Text = Trim(ds.Tables("pcbx_ext_mng").Rows(0)"EM001"))
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) Or Trim
(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = "" Then
TextBox3.Text = ""
问题点数:100、回复次数:19Top
1 楼icyer()回复于 2002-06-07 11:17:19 得分 0
错的是哪一句?
如果是第一句的话,你先判断ds.Tables("pcbx_ext_mng").Rows(0)("EM001")是否为nullTop
2 楼jumpliu()回复于 2002-06-07 11:20:01 得分 0
加.ToString()再试?Top
3 楼redcaff_l(热的咖啡)回复于 2002-06-07 11:29:28 得分 10
这里错了:
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) Or Trim
(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) == "" Then
应该是两个等号~~~~~~~Top
4 楼Bennychu(深圳乞丐)回复于 2002-06-07 11:46:20 得分 0
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) Or Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = "" Then
TextBox3.Text = ""
Else : TextBox3.Text = Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME"))
End If
在编译的时候,.net给我的提示:Cast from type 'DBNull'to type 'string 'is not valid .
具体错误行为:第一行和第二行,当我判断DEPNAME为空的时候,赋值TextBox3.txt=空Top
5 楼icyer()回复于 2002-06-07 11:56:50 得分 0
把 Or 改为 OrElse 才对。
Top
6 楼Bennychu(深圳乞丐)回复于 2002-06-07 12:01:41 得分 0
to icyer(),改成OrElse也不行,还是提示相同的问题:Cast from type 'DBNull' to type 'String' is not valid
我想是不是在判断时,语句有问题???Top
7 楼redcaff_l(热的咖啡)回复于 2002-06-07 12:22:15 得分 0
贴主试过多加一个等号了吗?Top
8 楼icyer()回复于 2002-06-07 12:44:06 得分 10
那你就分成两行写吧:
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) Then
TextBox3.Text = ""
Else
TextBox3.Text = Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME"))
End IfTop
9 楼Bennychu(深圳乞丐)回复于 2002-06-07 12:50:13 得分 0
to icyer(),谢谢你能仔细的回答这个问题,可是,我没办法分成两行:因为我要同时判断Table 中的两个字段值是否符合条件
to 热的咖啡:您给的提示在VB里是错误语法,我用的VBTop
10 楼icyer()回复于 2002-06-07 13:17:09 得分 10
我这里用OrElse就可以的呀:
Dim tbl As New DataTable()
tbl.Columns.Add("col")
Dim row As DataRow = tbl.NewRow()
tbl.Rows.Add(row)
If IsDBNull(tbl.Rows(0)(0)) OrElse Trim(tbl.Rows(0)(0)) = "" Then
Response.Write("null")
End If
当把OrElse改成Or之后,就会出现你的错误。Top
11 楼losenetway(firesword)回复于 2002-06-07 13:23:48 得分 10
IsDBNull是静态方法,不能那样调用,当写为你那样子时,系统可能以为那是一种强制转换,就出现了类型转换错误,下面那样是可以的(我是在c#下做的,vb应该没有区别)
System.Convert.IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME"))
//
感觉你那样判断是多余的
TextBox3.Text = Trim(ds.Tables("pcbx_ext_mng").Rows(0).("DEPNAME"))在vb下会有问题么?C#下ds.Tables["pcbx_ext_mng"].Rows[i].ItemArray[1].ToString()可是好得很的
Top
12 楼redcaff_l(热的咖啡)回复于 2002-06-07 13:45:42 得分 0
哦,不好意思。
我理解你的意思是
If bool Or bool Then ...
感觉Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = ""像是赋值语句。
可能我理解错了?Top
13 楼Bennychu(深圳乞丐)回复于 2002-06-07 14:23:26 得分 0
to 流浪剑客,请看我的SQL语句:
str = "SELECT *,(SELECT TOP 1 CA002 FROM USER_BASEDATA f WHERE EM001=f.CA015) AS UNAME,(SELECT TOP 1 c.DB002 FROM USER_BASEDATA b, DEPT_BASEDATA c WHERE EM002=b.CA007 AND b.CA004=c.DB001 ) AS DEPNAME FROM PCBX_EXT_MNG where EM001='" + Request.QueryString("aa") + "' ORDER BY EM002 "
其中,UNAME和DEPNAME实际上并不在pcbx_ext_mng这张表中, 而是由其它表关联后产生的字段,我猜想是不是因为这个原因,才导致System.Convert.IsDBNull报错呢???Top
14 楼Bennychu(深圳乞丐)回复于 2002-06-07 14:25:14 得分 0
to 热的咖啡,对,我的意思就是If bool Or bool Then ...然后给Textbox赋值Top
15 楼redcaff_l(热的咖啡)回复于 2002-06-07 15:06:52 得分 0
Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = ""在C#中是赋值语句,
Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) == ""才是比较两者是否相等的。
难道C#和VB相差这么大?还是我孤陋寡闻,学识太浅了。Top
16 楼losenetway(firesword)回复于 2002-06-07 22:36:55 得分 0
to:Bennychu(深圳乞丐)
那个问题你最好是单步调试,我测试了一下你的sql语句,应该是不会出问题的,即使没有数据,也会返回一个null值,那个判断如果按照我的方法应该是不会出错的。如果还是有问题的话单步调试是最好的了
Top
17 楼power0816(zpower)回复于 2002-06-08 16:10:13 得分 60
我看了你的源代码,改成这样就好了
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0).Item("DEPNAME")) Then
TextBox3.Text = "無部門"
End IfTop
18 楼power0816(zpower)回复于 2002-06-08 16:10:36 得分 0
If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0).Item("DEPNAME")) Then
TextBox3.Text = "無部門"
End IfTop
19 楼power0816(zpower)回复于 2002-06-08 16:21:40 得分 0
ISDBNULL(TRIM(....) )用法错误Top
20 楼Bennychu(深圳乞丐)回复于 2002-06-08 16:27:17 得分 0
虽然问题解决了,可是我有点不明白,为什么在Rows(0)后加上一个item就可以了呢???
power0816,可否告诉我是什么原因呢?还有其他人如果知道,麻烦告诉我!!!!Top




