数据库内容:
id   name
0    wawaOledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().GetType().ToString());
显示:System.Int16然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
MessageBox.Show(dbComm.ExecuteScalar().ToString());
显示:0然后:
OledbDataCommand dbComm=new OleDbDataCommand("select max(id) from tb_temp",myConn);
int maxid=(int)dbComm.ExecuteScalar();//在这里报错:指定的转换无效,使用long maxid=(long)dbComm.ExecuteScalar();也不行
MessageBox.Show(maxid.ToString());后又测试:
int i=0;
object objI=(object)0;
MessageBox.Show((int)objI);
又通过了
为什么?百思不解

解决方案 »

  1.   

    Int32.Parse

    Convert.ToInt32
      

  2.   

    int maxid= Convert.ToInt32( dbComm.ExecuteScalar() );--------
    System.Int16 ?
    System.Int32 ?
      

  3.   

    int maxid=(int)dbComm.ExecuteScalar();改为
    int maxid=Convert.toInt32(dbComm.ExecuteScalar())应该可以过去
      

  4.   

    要想看差异,可以在两种情况下,设置对象,然后监视
    int maxid=(int)dbComm.ExecuteScalar();//在这里报错:指定的转换无效,使用long maxid=(long)dbComm.ExecuteScalar();也不行
    MessageBox.Show(maxid.ToString());后又测试:
    int i=0;
    object objI=(object)0;
    MessageBox.Show((int)objI);
    这两种情况下的不同,就可以看出差异
      

  5.   

    我想知道这是为什么?而且只有当max(id)小于等于0时才会发生错误,id>0的时候是可以通过的,为什么呢?
      

  6.   

    int maxid=int.Parse(dbComm.ExecuteScalar());试一试看行不行
      

  7.   

    用Convert.ToInt32可以的,已经测试过了,问题是:为什么呢?
      

  8.   

    ()强制转换运算符特点:
    1,类型转换失败会抛出异常InvalidCastException
    2,只要类型转换成立,null值不会抛出异常Convert类转换特点:
    1,null值不会抛出异常,比如Convert.ToString(null)会返回String.Empty
    2,由于格式不对,可能会抛出FormatExceptionas类型转换运算符特点:
    1,永远不会抛出异常
    2,输入null值或者转换失败都会返回null
    (typeName),此方法适合于类型,type.Parse, 此方法只适于类.NET中的数字类型,还有一种就是使用 Convert 类型来进行类型转换。
      

  9.   

    语句只有 select max(id) from tb_temp 这一句么??
    是否有类型转换的问题。
    遇到过一次类似的问题是类型转换过程中长度的问题。
    http://blog.csdn.net/dutguoyi/archive/2006/08/26/1122916.aspx
      

  10.   

    ToString 的结果是零意味着它转换为字符串显示为零,怎么能理解成值为零呢?
      

  11.   

    可能当max(id)小于等于0时,ExecuteScalar返回的是一个decimal 或者 double类型的值。
    你直接在sql文中把max(id)转化为int,试试。
      

  12.   

    刚看过MSDN,那个0不是值,是未初始化,可也用DBNULL.Value 来比较,我的问题和你一样。