{"Invalid object name 'userrole'."}
    [System.Data.SqlClient.SqlException]: {"Invalid object name 'userrole'."}
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: null
    InnerException: null
    Message: "Invalid object name 'userrole'."
    Source: ".Net SqlClient Data Provider"
    StackTrace: "   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\r\n   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\r\n   在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()\r\n   在 System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n   在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n   在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)\r\n   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,
 Boolean returnStream, String method, DbAsyncResult result)\r\n   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n   在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)\r\n   在 System.Data.SqlClient.SqlCommand.ExecuteReader()\r\n   在 King.BookShop.SQLDAL.SQLHelper.ExecuteReader(String sql, SqlParameter[] param, CommandType cmdType) 位置 C:\\Documents and Settings\\Administrator\\桌面\\King\\King.BookShop.SQLDAL\\SQLHelper.cs:行号 61"
    TargetSite: {Void OnError(System.Data.SqlClient.SqlException, Boolean)}  晕死了,,在用SqlDataReader读取数据的时候出了这个异常,是什么原因啊请教高手
在线等,来都给分

解决方案 »

  1.   

    代码发上来看看,'userrole'无效
      

  2.   

    SQLHelper.cs:行号 61  Invalid object name 'userrole'."}  看以下你的SQLHelper.cs的61行的userrole
      

  3.   

    相应的代码贴一下!!感觉是userrole 这个东西出问题了吧
      

  4.   

    不知道我开始用一个
    public static DataTable ExecuteAll(string sql)
            {
                DataTable table = new DataTable();
                SqlConnection con = new SqlConnection(SQL_CON);
                SqlDataAdapter ada = new SqlDataAdapter(sql, con);
                ada.Fill(table);
                return table;
            }
    返回一个表的信息 
    然后 
    void AddList(List<User> list, DataTable table)
            {
                for (int i = 0; i < table.Rows.Count;i++ )
                {
                    User user = new User();
                    user.Id = (Int32)table.Rows[i]["id"];
                    user.LoginId = table.Rows[i]["loginid"].ToString();
                    user.LoginPwd = table.Rows[i]["loginpwd"].ToString();
                    user.Name = table.Rows[i]["name"].ToString();
                    user.Address = table.Rows[i]["address"].ToString();
                    user.Phone = table.Rows[i]["phone"].ToString();
                    user.UserRoleFK = (new UserRoleDAL()).SelectById((Int32)table.Rows[i]["userroleid"]);                user.UserStateFK = (new UserStateDAL()).SelectById((Int32)table.Rows[i]["userstate"]);
                }
            }
    我想如果是高手应该都能看明白,,在进行外键查询用的是SqlDataReader,就出了上面的异常,,高手说下啊分不够,我在加
      

  5.   

    是不是你SQL目前的这个登录角色,不具备权限。
      

  6.   

    对象名称' userrole '  无效
      

  7.   

    public static SqlDataReader ExecuteReader(string sql, SqlParameter[] param, CommandType cmdType)
            {
                try
                {
                    con = new SqlConnection(SQL_CON);
                    SqlCommand cmd = new SqlCommand(sql, con);
                    ExecuteCmd(cmd, param, con, cmdType, sql);
                    SqlDataReader red = cmd.ExecuteReader();                return red;
                }
                catch (Exception ex)
                {
                    
                    throw;
                }
                
            }打红色的是我的61行代码
      

  8.   

    ser.UserRoleFK = (new UserRoleDAL()).SelectById((Int32)table.Rows[i]["userroleid"].ToString());    
      

  9.   

    额!确实好晕!好象不是连接问题啊,是不是SQLHelper类里有错啊!额!慢慢调下吧,加油啊!SqlDataReader报错最多是有时疏忽没关闭呀,没见过这麽乱的~
      

  10.   

    是不是你的SQL语句写的有问题。
      

  11.   

    额,那外键应该单查一下,类似这样写
     private static IList<Schedule> GetScheduleBySql(string sql)
            {
                IList<Schedule> list = new List<Schedule>();
                int meet;
                string user;            try
                {
                    using (DataTable dt = DBHelper.GetDateTable(sql))
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            Schedule sch = new Schedule();
                            sch.ScheduleId = (int)dr["ScheduleId"];
                            sch.Title = (string)dr["Title"];
                            sch.Address = (string)dr["Address"];
                            sch.BeginTime = (DateTime)dr["BeginTime"];
                            sch.EndTime = (DateTime)dr["EndTime"];
                            sch.SchContent = (string)dr["SchContent"];
                            sch.CreateTime = (DateTime)dr["CreateTime"];
                            sch.IfPrivate = (int)dr["IfPrivate"];
                            meet = (int)dr["MeetingId"];      //外键
                            user = (string)dr["CreateUser"];  //外键                        sch.Meeting = (MeetingInfo)MeetingInfoService.GetMeetingInfoById(meet);
                            sch.CreateUser = (UserInfo)UserInfoService.GetUserInfoByUserId(user);                        list.Add(sch);
                        }
                        return list;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    throw ex;
                }
      

  12.   

    你先看一下数据库连接con执行con.Open()吗?
    或在cmd中执行数据库连接打开?
      

  13.   

    问题应该是ExecuteReader用完没有及时关闭,和其它数据库操作方法产生冲突造成的
      

  14.   

    {"Invalid object name 'userrole'."} 
    这一句很重要
      

  15.   

    给以下几点建议:1.检查此用户权限2.看sql语句是否有问题,最好能在查询分析器里调试好3.在查询时最好不要用reader,读起来比较慢,建议用dataTable或dataSet
      

  16.   


    'userrole' 有问题 改改 试试
      

  17.   

    可能还是和你定义的userrole有关系,建立断点分析。
      

  18.   

     (new UserRoleDAL()).SelectById((Int32)table.Rows[i]["userroleid"]);   
    你返回的是一个角色实体,可是你此时要赋值只是一个普通的数据类型
    我想应该是(new UserRoleDAL()).SelectById((Int32)table.Rows[i]["userroleid"]).Id之类的属性吧
      

  19.   

    Invalid object name 'userrole'
      

  20.   

    userrole不存在,调试看看sql语句
      

  21.   

    userrole是乎是表中的一个字段(属性)
    检查一下你的SQL语句和SqlParameter部分,是不是有名称与实际不一致下面方法执行后,连接是乎没有关闭
    public static DataTable ExecuteAll(string sql) 
            { 
                DataTable table = new DataTable(); 
                SqlConnection con = new SqlConnection(SQL_CON); 
                SqlDataAdapter ada = new SqlDataAdapter(sql, con); 
                ada.Fill(table); 
                return table; 
            }
      

  22.   

    {"Invalid object name 'userrole'."} 
        [System.Data.SqlClient.SqlException]: {"Invalid object name 'userrole'."} 
        Data: {System.Collections.ListDictionaryInternal} 这就是错误
      

  23.   

    userrole无效 是不是表里面设置的类型问题?
      

  24.   

    是不是userrole出现问题了?你对应一下这个字段,有可能是因为跟数据库的字段不符
      

  25.   

    'userrole'出问题了。
    你看看传的参数
      

  26.   

    楼主你是不是在 你的表中有个usrerole字段啊,要是有的话就改个名字试试。
      

  27.   

    public static DataTable ExecuteAll(string sql) 
            { 
                DataTable table = new DataTable(); 
                SqlConnection con = new SqlConnection(SQL_CON); 
                SqlDataAdapter ada = new SqlDataAdapter(sql, con); 
                ada.Fill(table); 
                return table; 
            } 
    返回一个表的信息 
    然后 
    void AddList(List <User> list, DataTable table) 
            { 
                foreach(DataRow i in DataTable.rows)            { 
               User user = new User(); 
                    user.Id = Convert.ToInt32(i["id"]);
                    user.LoginId = i["loginid"].ToString(); 
                    user.LoginPwd = i["loginpwd"].ToString(); 
                    user.Name = i["name"].ToString(); 
                    user.Address = i["address"].ToString(); 
                    user.Phone = i["phone"].ToString(); 
                   // user.UserRoleFK = (new UserRoleDAL()).SelectById((Int32)table.Rows[i]["userroleid"]);               // user.UserStateFK = (new UserStateDAL()).SelectById((Int32)table.Rows[i]["userstate"]); 看不懂你这两句
                     user.UserRoleFK=Convert.ToInt32(i["useroleid"])
                   user.UserStateFK=Convert.ToInt32(i["userstate"])
     //这样写看怎么样,如果错了,你就当我是来蹭分来的 
                } 
            }