大家看我写的方法:
    private int Id = 0;
    public string execteGetReturn(string strSql)
    {
        //创建连接conn
        ……
        cmd.Connection = conn;
        cmd.CommandText = strSql;
        string result = (string)cmd.ExecuteScalar();
        return result;
    }
    public void getID()
    {
        
        string strSql="select id from voteConfig";
        Id = int.Parse(this.execteGetReturn(strSql));     }
结果预览:出现下面的错误:
无法将类型为“System.Int32”的对象强制转换为类型“System.String”。 
行 24:         string strSql="select id from voteConfig";
行 25:         Id = int.Parse(db.execteGetReturn(strSql)); 
行 26: 
行 27:     }
请问高手们,如何会出现这种情况呢?如何解决呢?

解决方案 »

  1.   

     Id = int.Parse(db.execteGetReturn(strSql).ToString()); 
      

  2.   

    试了一下一楼朋友的建议,但错误还是一样。
    Id = int.Parse(db.execteGetReturn(strSql))不是把string类型转换成int类型么?
    为啥提示错误里说是int转换成string呢?
      

  3.   

    string result = (string)cmd.ExecuteScalar(); 
    这句,改为:
    string result = Convert.ToString(cmd.ExecuteScalar()); 
      

  4.   

    你的db.execteGetReturn看看是不是返回一个ds数据集还是返回一个int 类型?要不直接这样写
    string strSql = "select id from voteConfig"; 
            SqlConnection conn = new SqlConnection(此处写连接数据库字符串);
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
            da.Fill(ds);
            int id = Convert.ToInt32(ds.Tables[0].Rows[0]["Id"].ToString());
      

  5.   

    六楼的朋友的建议解决了问题。
    问一下:为什么是怎么的呢?
    string result = (string)cmd.ExecuteScalar(); 和
    string result = Convert.ToString(cmd.ExecuteScalar()); 
    不都是强制转换,那有什么区别呢?为什么有写错误编译的时候没问题,预览的时候就出线了呢?
      

  6.   

      Id = int.Parse(db.execteGetReturn(strSql));  
    改为int Id;
    if( int.TryPase(db.execteGetReturn(strSql),out Id) )
    {
      }
      

  7.   

    string result = (string)cmd.ExecuteScalar();
    你调试下看看这个 result  到时是不是数字啊?
      

  8.   

    db.execteGetReturn(strSql)返回的是string还是int?
    还有this.execteGetReturn(strSql)与db.execteGetReturn(strSql)是一样的吗
      

  9.   

    数据库中 id 是数字类型,而 ExecuteScalar 是 object 类型,也就是说是把数字类型装到 object 类型中,它的运行时类型为 int,而 (string) 转换要求 object 的运行时类型为 string,所以原来的代码会出错。
    考虑下面的代码,它是会出错的:
    int i = 3;
    object o = i;
    string s = (string)o;