首页 新闻 搜索 专区 学院

无法将类型为“System.Object”的对象强制转换为类

0
悬赏园豆:30 [已解决问题] 解决于 2008-07-16 09:53
<P>我定义了一个如下的数据访问类的方法:</P> <P>public object ExcuteScalar(string queryString)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand cd = new OleDbCommand();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.CommandText = queryString;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.CommandType = CommandType.Text;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cd.Connection = Connection;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object result=new object();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result =cd.ExecuteScalar();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P> <P>因为要取出数据库中的一个值,而且它是一个字符串类型,所以我用了以下语句:</P> <P>string columnName =(string)db.ExcuteScalar(sqlString);</P> <P>但是运行的时候,它引发了异常,<EM>无法将类型为“System.Object”的对象强制转换为类型“System.String”。</EM> </P> <P>请问这是怎么回事,请大家帮忙看一下,谢谢!</P>
问题补充: 我已经调试过c#代码了,在ExcuteScalar()方法里设置了断点,调试时变量result的值为{object},所以转换为string类型就是System.Object了,这样的话是不是没取到数据呢?
爱上编程的主页 爱上编程 | 初学一级 | 园豆:55
提问于:2008-07-10 21:49
< >
分享
最佳答案
0
告诉你一种通用的方法,就是调试,你可以在ExcuteScalar方法里面设置断点,然后监视cd.ExecuteScalar返回的类型,虽然他是object,但是你可以在监视中看到他的准确类型,这样你可以把这个object先转换成准确类型;然后再转换成你想要的类型。 还有一种简单的,但不一定高效的方法是使用Convert.ToString(Object obj)方法,这个方法不会抛出任何异常,通常都可以得到你想要的值。
玉开 | 大侠五级 |园豆:8822 | 2008-07-11 10:39
其他回答(8)
0
ToString试试。
Windie Chai | 园豆:580 (小虾三级) | 2008-07-10 21:59
0
可能cd.ExecuteScalar()返回的是个int,或者别的什么东西,要把它转型成string,当然会抛异常了. 解决方法: result = cd.ExecuteScalar(); result = result != null ? result.ToString() : null;
deerchao | 园豆:8167 (大侠五级) | 2008-07-10 23:13
0
string columnName =(string)db.ExcuteScalar(sqlString); 当然不能这么强制转换了……基类到子类的强制转换,必然会报运行时错误。而先把一个子类赋值给基类,再进行基类到子类的强制转换,这就是允许的了。假设B是A的子类,即: B b = new B(); A a = b; B c = (B)a; 是允许的,而 A a = new A(); B b = (B)a; 是不允许的。
麒麟.NET | 园豆:3614 (老鸟四级) | 2008-07-11 10:36
0
这个是我刚才写的这种转换是可以的: protected void Button1_Click(object sender, EventArgs e) { string strTemp = "morningwang"; Response.Write((string)GetValue(strTemp)); //显示结果是: Hello:morningwang } private object GetValue(string str) { object obj = new object(); obj = "Hello:" + str; return obj; } 你应该先判断db.ExcuteScalar(sqlString)是否为空,当不为空的时候在进行转行,你直接进行转换是比较危险的做法。
金鱼 | 园豆:1090 (小虾三级) | 2008-07-11 10:38
0
有可能返回的是个null,所有不能强制转换
TG.Yang's IT Space | 园豆:45 (初学一级) | 2008-07-11 10:48
0
db.ExcuteScalar(sqlString) 返回的是Object型的,而Object型是没有办法强制转换成String型的,建议使用db.ExcuteScalar(sqlString).toString()
吴畏 | 园豆:426 (菜鸟二级) | 2008-07-11 16:08
0
Convert.ToString()
Anders Cui | 园豆:1570 (小虾三级) | 2008-07-12 10:10
1
建议楼主去了解下多态 其实类型的转换也就是设计里面的继承原则 而多态就是利用了继承原则的应用 例如一个int型的可以转换成object类型 因为object类型是int的父类 而string可以转换成object类型也是应为object是string的父类 而int型的即时转换成object了也不能转换成string 就如 苹果(string)和梨子(int)都是水果(object) 苹果可以用水果代言 伪代码: object shuiguo = string pingguo 正确 梨子也可以用水果来代言 伪代码: object shuiguo = int lizi 正确 但是我们不能叫苹果为梨子虽然说他们都是水果 伪代码: object shuiguo = int lizi 正确 string pingguo = object shuiguo 错误 本例中你返回的可能是个object型的int 是不能直接转换成string的
小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2008-07-13 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册