//SqlServer
IDataReader reader=value;
int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
if (!reader.IsDBNull(index))
   return (int)reader.GetInt32(index);//这里转换为什么会报错?指定的类型转换无效//如何才能做到数据库无关?用Convert.Int32(reader["columnName"])性能有影响吗?

解决方案 »

  1.   

    IDataReader reader=value;
    int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
    if (!reader.IsDBNull(index))
       return (int)(decimal)reader.GetInt32(index);//
      

  2.   

    肯定是数据转换的问题  慢慢调试就行 
    有个网站 能查出任何QQ都进了什么QQ群 他的数据是自己计算的还是数据库里的?? 如果是数据库 那他是从哪下载的呢? http://www.sjzwan.com/qun.aspx 这是net写的 你们看看  知道的M我
      

  3.   

    //SqlServer
    IDataReader reader=value;
    int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
    if (!reader.IsDBNull(index))
       return Convert.toInt32(reader.GetInt32(index));//这里转换为什么会报错?指定的类型转换无效
    这个应该不会影响效能的
      

  4.   


    return reader.GetDouble(index);
    //返回double型
      

  5.   

    IDataReader reader=value;
    int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
    if (!reader.IsDBNull(index))
       return (int)(decimal)reader.GetInt32(index);//这里报错啊哥们
    (int)(decimal)reader.GetInt32(index)还是报错的,我知道解决方法,我不知道为什么会跟数据库类型绑定?
      

  6.   

    晕,应该是return (int)reader.GetDecimal(index);
    应为你的字段是numeric(38,4)对应的是Decimal类型的,所以Reader.GetInt32(index)这样就会报错
      

  7.   


    那为什么Convert.Int32(reader["columnName"])这样就可以了?
      

  8.   

    因为reader["columnName"]已经读出数据,并且是decimal类型了(或double)
    decimal能直接通过(int)或convert.Int32转换成int类型
      

  9.   

    reader["columnName"]与GetValue()方法一样,返回的都是object类型的对象,它可能是各种数据类型,如果在数据库中为空,则返回DBNull
    GetInt32()返回的是整型,这就要求该字段的值必须是整形,如果是其他类型或者空,则会引发异常