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

总提示指定的转换无效,怎么回事呢?
“/”应用程序中的服务器错误。
--------------------------------------------

指定的转换无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidCastException: 指定的转换无效。

源错误: 


行 24: while (rdr.Read())
行 25: {
行 26: brandInfo cat = new brandInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3));
行 27: categories.Add(cat);
行 28: }
 

其中0字段是int类型,1字段是string,2字段是char,3字段是nchar
好像问题出在后两个字段,可不知道如何处理,请教

------解决方案--------------------
建议楼主再仔细检查下
brandInfo cat = new brandInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3)); 
new的时候构造函数里面类型需一致.
rdr.Get..需要类型都一致,应该是类型不一致.
------解决方案--------------------
还有一种可能情况就是无返回纪录。
------解决方案--------------------
rdr.GetInt32(0)
数据库里面字段为空或者非int型

------解决方案--------------------
其中0字段是int类型,1字段是string,2字段是char,3字段是nchar 
1字段在数据库中是什么类型?
------解决方案--------------------
rdr["表列名"].ToString();(如果是字符串的话)
------解决方案--------------------
肯定是类型不匹配造成的,调试一下看看
------解决方案--------------------
string sql = @"select top 1 a.title,a.creator,b.comment,b.createdtime from dbo.Knows_Question a inner join dbo.Knows_Answer b
on a.questionid=b.questionid
where b.creator='"+name+"' order by b.createdtime desc";

expert ext = null;
SqlDataReader dr = Common.Database.ExecuteReader(CommandType.Text, sql);
while (dr.Read())
{
ext = new expert(dr.GetString(0), dr.GetString(1), dr.GetString(2));
}
return ext;
---------------------
 private string _title;
 private string _Creator;
 private string _Comment;
public expert(string title, string creator, string comment)
{
this._title = title;
this._Creator = creator;
this._Comment = comment;
}


------解决方案--------------------
楼主先调用
public object GetValue(int i)
然后在Watch窗口或者通过typeof检查具体类型
------解决方案--------------------
rdr["表列名"].ToString(); 你这样试试~~应为rdr出来的好像是OBJECT类型~你的那意思是获取~什么类型~~可能会出错~~~
本来是object类型的~~ 字符串就这样写 rdr["表列名"].ToString();
其他的可以~~ (int)rdr["列明"]; 可以这样写~
------解决方案--------------------
从查询器里看下你的记录,可能是其中有值为NULL的字段


把NULL的换为''