“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------指定的转换无效。 
说明: 执行当前 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
好像问题出在后两个字段,可不知道如何处理,请教

解决方案 »

  1.   

    建议楼主再仔细检查下
    brandInfo cat = new brandInfo(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3)); 
    new的时候构造函数里面类型需一致.
    rdr.Get..需要类型都一致,应该是类型不一致.
      

  2.   

    rdr.GetInt32(0)
    数据库里面字段为空或者非int型
      

  3.   

    其中0字段是int类型,1字段是string,2字段是char,3字段是nchar 
    1字段在数据库中是什么类型?
      

  4.   

    rdr["表列名"].ToString();(如果是字符串的话)
      

  5.   

     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;
            }           
      

  6.   

    楼主先调用
    public object GetValue(int i)
    然后在Watch窗口或者通过typeof检查具体类型
      

  7.   

    rdr["表列名"].ToString();  你这样试试~~应为rdr出来的好像是OBJECT类型~你的那意思是获取~什么类型~~可能会出错~~~
    本来是object类型的~~  字符串就这样写 rdr["表列名"].ToString();  
    其他的可以~~   (int)rdr["列明"]; 可以这样写~
      

  8.   

    数据表四个字段类型
    0:int  1:string  2:char(1)  3:nchar(20)        public brandInfo(int _Pid,string _Pname,string _Ppinyin,string _Penglish)
            {
                this._Pid = _Pid;
                this._Pname = _Pname;
                this._Ppinyin = _Ppinyin;
                this._Penglish = _Penglish;
            }以上是定义
      

  9.   

    从查询器里看下你的记录,可能是其中有值为NULL的字段
    把NULL的换为''