DataRowView里第1列是Int16类型,要把数据读出,赋给同样是int16的变量,我非得写成这样才行:Seq = System.Convert.ToInt16(drvCH[0]);都是相同的数据类型,为什么要转换一下?为什么不能写成:
Seq = (int)drvCH[0];
或其它开式?

解决方案 »

  1.   

    楼主你自己搞错了。
    int是Int32。(System.Int16)drvCh[0]是可以的吧?
      

  2.   

    我在Oracle也遇到过这种问题。
    其实有种方法最简单:
    int id = Int32.Parse(drvCH[0].ToString());
    先转成字符串,再转成数值,这肯定没问题。
      

  3.   

    楼上正解
    int id = Int32.Parse(drvCH[0].ToString());
    先转成字符串,再转成数值
      

  4.   

    可以阿,只要你表结构中的列是System.Int16的你就可以这样取出
    DataTable dt;
    int seq =(int)dt.rows[i][j];
      

  5.   

    short seq = (short)drvCH[0];
      

  6.   

    .NET是强类型的,只有某些是可以隐式转换的drvCH[0]其实是一种object型,如果真是Int16,(int)(int16数字)当然可以
    因为int是Int32位,即使你不写也可以直接把int16数字赋给int32但现在是drvCH[0]是object,所以必须用convert函数或int.Parse(drvCH[0].ToString());
      

  7.   

    之所以转换出错是因为数据库中取出来的时候往往是在后边带有空格的,你监视一下就知道了 dt.rows[i][j] 其实在数据的末尾带有空格 数据库就是这么个机把样子的  没有办法
      

  8.   

    现在基本清楚了.1.数据库中的定义是Int16,而int是Int32,这是问题的关键.
    2.变量Seq定义是int,也就是Int32drvCH[0]虽然指的是第一列,但它是对象,不是第一列的数据.所以要通过解包转换.下面的写法能通过:
    Seq = (Int16)drvCH[0]
    Seq = Int32.Parse(drvCH[0].ToString());
    Int32 q = (Int16)drvCH[0]由于包中是Int16,所以必须用Int16解包,下面的写法错:
    Seq = (Int32)drvCH[0]
    Seq = (int)drvCH[0]
      

  9.   

    drvCH[0]是object类型,所以必须转换。int16 是 short 类型
    int32 是 int   类型
    int64 是 long  类型
    short Seq = System.Convert.ToInt16(drvCH[0]);
    或short Seq = (short)drvCH[0];
      

  10.   

    不过最好还是处理下NULL值,不然会出错的