none
C# 查询数据后的转换和判断 RRS feed

  • 问题

  • 在查询出来后转换类型时比如转换成INT型时 应该用 (int)dr["ID"]; 而不是用Convert.ToInt32(dr["ID"]);

    还有在查询出来时用 if(dr["ID"]!=DbNull.Value)     //判断是否为NULL我试用if(dr["ID"]!=Null) 有时会出错的

    是这样吗?
    2011年8月22日 6:12

答案

  • (int)dr["XXX"] 属于 static cast,在 IL 指令级别只是一个 IL 而已。Convert.ToInt32(dr["XXX"]) 其实是调用了 ((IConvertible)(dr["XXX"])).ToInt32(CultureInfo.CurrentCulture),这个显而易见,花费很大。

    但是,在某些情况下用 Convert 会使代码更加具备伸缩性,比如在处理日期格式时,Convert 会更给力,还有,在处理数据库有而 C# 没有的类型转换时,用 Convert 是首选。

    第二个问题,数据库中和 .NET 中表达空数据是不同的,所以,就出现了一个叫 DBNull 的东西,那么显然,用 if (dr["XXX"] == null) 并不能真实判断在数据库界别上的 NULL 值。不过据我所知,现在的 SQL Server 已经能把 NULL 的数据列以 C# 认识的 null 对象返回,所以,这个问题对于现代程序可能不大遇见。


    Mark Zhou
    • 已标记为答案 Steven_Han 2011年8月23日 7:45
    2011年8月22日 8:38

全部回复

  • >>在查询出来后转换类型时比如转换成INT型时 应该用 (int)dr["ID"]; 而不是用Convert.ToInt32(dr["ID"]);

    No, 建议用Convert强制转型

    >>在查询出来时用 if(dr["ID"]!=DbNull.Value)     //判断是否为NULL我试用if(dr["ID"]!=Null) 有时会出错的

    试试先用Convert转成字符串再判断

    if (!string.IsNullOrEmpty(Convert.ToString(dr["ID"])))
    

     


    Shadowと愉快なコード達
    2011年8月22日 7:26
  • 转换的性能会较低
    2011年8月22日 7:43
  • (int)dr["XXX"] 属于 static cast,在 IL 指令级别只是一个 IL 而已。Convert.ToInt32(dr["XXX"]) 其实是调用了 ((IConvertible)(dr["XXX"])).ToInt32(CultureInfo.CurrentCulture),这个显而易见,花费很大。

    但是,在某些情况下用 Convert 会使代码更加具备伸缩性,比如在处理日期格式时,Convert 会更给力,还有,在处理数据库有而 C# 没有的类型转换时,用 Convert 是首选。

    第二个问题,数据库中和 .NET 中表达空数据是不同的,所以,就出现了一个叫 DBNull 的东西,那么显然,用 if (dr["XXX"] == null) 并不能真实判断在数据库界别上的 NULL 值。不过据我所知,现在的 SQL Server 已经能把 NULL 的数据列以 C# 认识的 null 对象返回,所以,这个问题对于现代程序可能不大遇见。


    Mark Zhou
    • 已标记为答案 Steven_Han 2011年8月23日 7:45
    2011年8月22日 8:38