日期:2014-05-18  浏览次数:20453 次

小白求教:关于一个数值转换错误的问题。
大家看我写的方法:
  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: }
请问高手们,如何会出现这种情况呢?如何解决呢?

------解决方案--------------------
string result = (string)cmd.ExecuteScalar(); 
这句,改为:
string result = Convert.ToString(cmd.ExecuteScalar());
------解决方案--------------------
数据库中 id 是数字类型,而 ExecuteScalar 是 object 类型,也就是说是把数字类型装到 object 类型中,它的运行时类型为 int,而 (string) 转换要求 object 的运行时类型为 string,所以原来的代码会出错。
考虑下面的代码,它是会出错的:
C# code
int i = 3;
object o = i;
string s = (string)o;