访问 DataReader 值时出错访问 SqlDataReader 中的连接表结果

问题描述

更新 - 问题已解决

以防万一一次检索所有数据,使用单个sql语句检索联接表结果,但无法访问并收到以下错误

异常详情:system.indexOutOfRangeException:crsName

顺便说一下,任何人都请提出一种更方便的方法来处理需要显示 JOIN 结果的 GridView。 而不是这种方法 - https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.datacontrolfieldcollection.add?view=netframework-4.8

BoundField courseBF = new BoundField();
courseBF.datafield="courseName";
courseBF.HeaderText="Course Name";
//Which is stated in Microsoft Document

这是代码接收错误

    string userID = (string)Session["userID"];
    string sql = "SELECT courseID from gpaSem where stuID=@userID";
    string temp = "";
    string temp02 = "";
    string[] crsID;
    string[] crsName;
    string[] grade;
    sqlConnection con = new sqlConnection(cs);
    sqlCommand cmd = new sqlCommand(sql,con);
    cmd.Parameters.AddWithValue("@userID",userID);

    con.open();
    sqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        temp += ("!" + dr["courseID"]);
    }
    crsID = temp.Split('!');
    crsID = crsID.Skip(1).ToArray();//course ID get
    dr.Close();
    con.Close();

    con.open();
    temp = "";
    foreach (string crs in crsID)
    {
        sql = "SELECT G.grade AS grade,C.crsName AS crsName FROM gpaSem G,course C WHERE G.courseID=C.courseID AND G.courseID=@courseID";
        cmd.Parameters.AddWithValue("@courseID",crs);
        dr = cmd.ExecuteReader();
        if(dr.Read())
        {
            temp += "!" + dr["crsName"];//error
            temp02 += "!" + dr["grade"];
        }
    }
    crsName = temp.Split('!');
    crsName = crsName.Skip(1).ToArray();//course name get
    grade = temp02.Split('!');
    grade = grade.Skip(1).ToArray();//grade get
    dr.Close();
    con.Close();

我的观点是,我应该在 sql 语句中显式使用 JOIN 还是我访问值的方式错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)