错的是哪一句?
如果是第一句的话,你先判断ds.Tables("pcbx_ext_mng").Rows(0)("EM001")是否为null

解决方案 »

  1.   

    这里错了:
    If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) Or  Trim
      
    (ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) == "" Then
                                    应该是两个等号~~~~~~~
      

  2.   

    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=空
      

  3.   

    把 Or 改为 OrElse 才对。
      

  4.   

    to icyer(),改成OrElse也不行,还是提示相同的问题:Cast from type 'DBNull' to type 'String' is not valid
    我想是不是在判断时,语句有问题???
      

  5.   

    那你就分成两行写吧:
    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 If
      

  6.   

    to icyer(),谢谢你能仔细的回答这个问题,可是,我没办法分成两行:因为我要同时判断Table 中的两个字段值是否符合条件
    to 热的咖啡:您给的提示在VB里是错误语法,我用的VB
      

  7.   

    我这里用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之后,就会出现你的错误。
      

  8.   

    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()可是好得很的
      

  9.   

    哦,不好意思。
    我理解你的意思是
    If bool Or bool Then ...
    感觉Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = ""像是赋值语句。
    可能我理解错了?
      

  10.   

    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报错呢???
      

  11.   

    to 热的咖啡,对,我的意思就是If bool Or bool Then ...然后给Textbox赋值
      

  12.   

    Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) = ""在C#中是赋值语句,
    Trim(ds.Tables("pcbx_ext_mng").Rows(0)("DEPNAME")) == ""才是比较两者是否相等的。
    难道C#和VB相差这么大?还是我孤陋寡闻,学识太浅了。
      

  13.   

    to:Bennychu(深圳乞丐)
    那个问题你最好是单步调试,我测试了一下你的sql语句,应该是不会出问题的,即使没有数据,也会返回一个null值,那个判断如果按照我的方法应该是不会出错的。如果还是有问题的话单步调试是最好的了
      

  14.   

    我看了你的源代码,改成这样就好了
    If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0).Item("DEPNAME")) Then
                TextBox3.Text = "無部門"
    End If
      

  15.   

    If IsDBNull(ds.Tables("pcbx_ext_mng").Rows(0).Item("DEPNAME")) Then
                TextBox3.Text = "無部門"
    End If
      

  16.   

    ISDBNULL(TRIM(....) )用法错误
      

  17.   

    虽然问题解决了,可是我有点不明白,为什么在Rows(0)后加上一个item就可以了呢???
    power0816,可否告诉我是什么原因呢?还有其他人如果知道,麻烦告诉我!!!!