//自定义方法判断当前管理员是否拥有管理此页面的权限
    public bool getSet()
    {
        string userName = Session["userName"].ToString();                       //获取管理员登录名
        string sql = "select * from tb_admSet where userName='" + userName + "'";
        SqlDataReader sdr = dataOperate.getRow(sql);
        sdr.Read();                                                             //读取一条记录
        return Convert.ToBoolean(sdr["systemSet"]);                             //返回是否拥有权限
    }
红字部分显示确保列表的最大索引小于列表的大小
确保索引不是负数
确保数据列名称正确
我的systemSet在数据库中是bit类型

解决方案 »

  1.   

    ...
    try
    {
        return Convert.ToBoolean(sdr["systemSet"]);
    }
    catch (Expection ex)
    {
        //return 一个默认值,或者处理错误
    }
      

  2.   

    先用HasRows判断一下是否有数据行            if (sdr.GetSchemaTable().Columns.Contains("systemSet") && sdr.HasRows)
                {
                    sdr.Read();
                    //return sdr.GetBoolean(0);//bit类型可以直接用boolean接收
                    return Convert.ToBoolean(sdr["systemSet"]??0);//为null则取false
                }
    或者用ExecuteScalar来获取
    修改sql:
    string sql = "select systemSet from tb_admSet where userName='" + userName + "'";
    object result = cmd.ExecuteScalar()??0;//如果查询结果为null,则取0(False)
    return Convert.ToBoolean(result);
      

  3.   

    sorry,有一点错误。
    sdr["systemSet"]返回的是DBNull,不能用??来判断。cmd.ExecuteScalar()如果null就取false的话也可以不判断:Convert.ToBoolean(null);//false