this.selectStr = "select count(*) from RoomType where RoomTypeName='" + typename + "'";
            this.sqlCommand1.CommandText = this.selectStr;
            this.sqlConnection1.Open();
            
Convert.ToInt32(this.sqlCommand1.ExecuteScalar().ToString())红色字体部分的转化,原始的this.sqlCommand1.ExecuteScalar()是个object类型
为什么直接用Convert.ToInt32(this.sqlCommand1.ExecuteScalar())
会错误呢
必须先转为string?难道这个object封箱前是个string类型不成?
先拆箱?必需?

解决方案 »

  1.   

    设置断点,单步调试一下

    this.sqlCommand1.ExecuteScalar().ToString()值是多少?
    是不是可以转化为int型?
      

  2.   

     "select count(*) from RoomType where RoomTypeName='" + typename + "'"; 
    这个代码表示返回的this.sqlCommand1.ExecuteScalar().肯定是一个数字喽,查不到记录就为0啊,
      

  3.   

    单步调试不行啊,就显示这个是个object类型,然后直接convert.toint32 的话就出错啊
      

  4.   

    object类型也不会错.object obj=null;
    Int32 i= Convert.ToInt32(obj);
      

  5.   

    这样会错:
    object obj=" ";
    Int32 i= Convert.ToInt32(obj);
      

  6.   

    convert.toint32(object)是可以转化的,出错的原因肯能是你的this.sqlCommand1.ExecuteScalar()这个object无法转换为int32类型,在使用convert转换的时候你可以用try...catch语句看看异常信息
    try
    {
      Convert.ToInt32(this.sqlCommand1.ExecuteScalar().ToString()) 
    }
    catch(exception ex)
    {
      //输出异常
      MessageBox.show(ex.tostring()); 
    }
      

  7.   

    object   obj=com.ExecuteScalar(); 
    if(obj   is   int) 
            i=(int)obj); 
    else   if   (obj   is   string) 

    }
    "select isnull(id,0) from usertable where Name='" + name + "'";