在查询数据时,有时要判断数据是否为NULL,下面两种方法,哪个效率高呀?
 
Convert.IsDBNull(dr["ID"])
 
 
 
string.IsNullOrEmpty(dr["ID"].ToString())

解决方案 »

  1.   

    string.IsNullOrEmpty(dr["ID"].ToString())
    如果是这句,当dr["ID"]为null的时候会报错,首先ToString()就得报错,你认为呢?
      

  2.   

    dr["ID"]==null;那2个方法好像不一样哦。
      

  3.   

    不讨论“效率”问题了,就是判断DBNull问题,第二种为什么会画蛇添足搞什么ToString呢?其实很多只有半年经验(但是号称有2年经验)的asp.net开发人员喜欢写ToString,以为这样可以不必了解对象的类型,有了bug程序也可以蒙混过去继续执行。当你明知道一个对象变量其实是string的时候,你应该编写代码(string)obj而不是obj.ToString()因为我从第一种代码中看到了其了解过obj的流程、知道其数据是怎么来的,明确承诺obj是string,如果有bug希望尽早出现;我从第二种代码看到的却是想让代码运行时蒙混过去,把obj的误用问题推卸给用户,当自己根本没有去了解obj的来龙去脉。
      

  4.   

    我遇到过好多刚到一个团队里正规地参与过一个项目开发就“太喜爱用 ToString() 来让程序赶紧混过去”的程序员,这类代码就算时间紧我们不修改,心里也是有一个结。你明明可以直截了当地写出类型清晰承诺清楚的代码,为什么要额外搞一个ToString()计算糊弄一下呢?
      

  5.   


    谢谢您,
    再请问一下,在查询出来后转换类型时比如转换成INT型时 应该用 (int)dr["ID"]; 而不是用Convert.ToInt32(dr["ID"]);还有在查询出来时用 if(dr["ID"]!=DbNull.Value)  是这样吗?
      

  6.   

     DBNull本身是一个类型,他提供一些方法和参数
    IsDBNull是当数据as IConvertible返回null时候为false
    当为DBNull.Value返回true;
    IsNullOrEmpty,是当string不为null时候返回string的Length是否为0
    两组方法的类型是不同的所以对应dr应为DBNull
      

  7.   


    那是Convert.IsDBNull(dr["ID"])  这样好
    还是 if(dr["ID"]!=DbNull.Value)   
      

  8.   

    我同意。但是我想知道为什么大多数方法都会继承到ToString()方法?
      

  9.   

    那是Convert.IsDBNull(dr["ID"]) 这样好
    还是 if(dr["ID"]!=DbNull.Value)
      

  10.   

    分析的很精辟了,呵呵,的确不必要在从object转到string判断了,你想下装箱拆箱自然就知道那个效率更高了
      

  11.   

    在微软网上得到的答案:if (! DBNull.Value.Equals(row[fieldName])) 
          return (string) row[fieldName] + " ";