CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请看下列代码,有查出错误者,高分回报!!!

楼主Bennychu(深圳乞丐)2002-06-07 11:10:48 在 .NET技术 / ASP.NET 提问

不明白是什么原因,是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

相关问题

  • 请帮助我翻译下列代码
  • 下列代码怎么写注册机?
  • 下列js代码对应的vbscript代码如何写
  • 谁能把下列C++的代码翻译成C语言的代码?
  • 有谁知道下列代码出自什么地方?
  • 看一些下列代码。我是小菜
  • 怎么提取下列HTML代码中的数据?
  • 还是树的问题,请看下列代码有何错误!
  • 还是树的问题,请看下列代码有何错误!
  • 急,我在一个Delphi网站得到下列代码。

关键词

  • c#
  • ds
  • 语句
  • ca
  • pcbx
  • mng
  • depname
  • isdbnull
  • ext
  • 赋值

得分解答快速导航

  • 帖主:Bennychu
  • redcaff_l
  • icyer
  • icyer
  • losenetway
  • power0816

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo