C# 为什么我的asp c代码中没有数据?

C# 为什么我的asp c代码中没有数据?,c#,asp.net,C#,Asp.net,我有一张作业表。我想得到注册学生获得的总分数以及该学生可能获得的总分数。我有一个asp类,它计算字母等级,并用字母等级更新数据库中的注册记录。当没有数据存在时,我不断得到错误无效的读取尝试。我已经指出了错误发生的那一行 这是我的作业表: 如您所见,注册ID 69有很多作业。我使用以下存储过程来获取分配: ALTER PROCEDURE [dbo].[GetScores] @enrollmentId int AS BEGIN -- SET NOCOUNT ON added to

我有一张作业表。我想得到注册学生获得的总分数以及该学生可能获得的总分数。我有一个asp类,它计算字母等级,并用字母等级更新数据库中的注册记录。当没有数据存在时,我不断得到错误
无效的读取尝试。
我已经指出了错误发生的那一行

这是我的作业表:

如您所见,注册ID 69有很多作业。我使用以下存储过程来获取分配:

ALTER PROCEDURE [dbo].[GetScores] 
    @enrollmentId int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT sum(pointsEarned) AS totalEarned, sum(pointsPossible) AS totalPossible, enrollmentId 
    FROM Assignments 
    WHERE enrollmentId = @enrollmentId 
    GROUP BY pointsEarned, pointsPossible, enrollmentId
END
这是代码隐藏文件:

protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
                PopulateSemesterList();
        }

        private void PopulateSemesterList()
        {
            string connstring;
            connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);

            SqlCommand cmd = new SqlCommand("dbo.GetSemesters", conn);
            conn.Open();

            DDSemesters.DataSource = cmd.ExecuteReader();
            DDSemesters.DataTextField = "semesterName";
            DDSemesters.DataValueField = "semesterId";
            this.DataBind();

            conn.Close();
            conn.Dispose();

            DDSemesters.Items.Insert(0, new ListItem("Select Semester", "0"));
            DDSemesters.SelectedIndex = 0;
        }

        protected void DDSemesters_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList DDSemesters = sender as DropDownList;

            int selectedSemester = Convert.ToInt32(DDSemesters.SelectedItem.Value);

            string connstring;
            connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);

            SqlCommand cmd = new SqlCommand("dbo.GetCourses", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@semesterId", selectedSemester));

            conn.Open();

            DDCourses.DataSource = cmd.ExecuteReader();
            DDCourses.DataTextField = "courseName";
            DDCourses.DataValueField = "courseId";
            this.DataBind();

            conn.Close();
            conn.Dispose();

            DDCourses.Items.Insert(0, new ListItem("Select Course", "0"));
            DDCourses.SelectedIndex = 0;
            DDCourses.Visible = true;
            CoursesLbl.Visible = true;
        }

        protected void DDCourses_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList DDCourses = sender as DropDownList;

            int selectedCourse = Convert.ToInt32(DDCourses.SelectedItem.Value);

            string connstring;
            connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);

            SqlCommand cmd = new SqlCommand("dbo.CourseEnrollment", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@courseId", selectedCourse));

            conn.Open();

            DDStudents.DataSource = cmd.ExecuteReader();
            DDStudents.DataTextField = "fullName";
            DDStudents.DataValueField = "enrollmentId";
            this.DataBind();

            conn.Close();
            conn.Dispose();

            DDStudents.Items.Insert(0, new ListItem("Select Student", "0"));
            DDStudents.SelectedIndex = 0;
            DDStudents.Visible = true;
            StudentLbl.Visible = true;

        }

        protected void DDStudents_SelectedIndexChanged(object sender, EventArgs e)
        {
            assignmentInfoDiv.Visible = true;
            studentName.Text = DDStudents.SelectedItem.Text;
        }
protected void SaveScore_Click(object sender, EventArgs e)
        {
            Grades studentGrade = new Grades();
            studentGrade.courseId = Convert.ToInt32(DDCourses.SelectedItem.Value);
            studentGrade.enrollmentId = Convert.ToInt32(DDStudents.SelectedItem.Value);
            studentGrade.assignmentName = AssignmentList.SelectedItem.Text;
            studentGrade.pointsPossible = Convert.ToInt32(possibleTxt.Text);
            studentGrade.pointsEarned = Convert.ToInt32(earnedTxt.Text);
            if (studentGrade.alreadyExistsg())
            {
                AssignmentError.Text = "This student has already submitted " + studentGrade.assignmentName + " for this course.";
            }
            else
            {
                if (studentGrade.saveScore())
                {
                    Response.Redirect("StudentList.aspx");
                }
                else
                {
                    AssignmentError.Text = "Oops!  Something went wrong...";
                }
            }

        }
这是Grades.cs课程:

public void calculate()
    {
        string letterGrade;

        string connstring;
        connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
        SqlConnection conn = new SqlConnection(connstring);

        SqlCommand cmd = new SqlCommand("dbo.GetScores", conn);
        cmd.Parameters.Add(new SqlParameter("@enrollmentId", courseId));

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        using (conn)
        {
            conn.Open();

            SqlDataReader reader = cmd.ExecuteReader();

            reader.Read();

Error Here----> double totalEarned = Convert.ToDouble(reader["totalEarned"]);
            double totalPossible = Convert.ToDouble(reader["totalPossible"]);

            double score = Math.Round(totalEarned / totalPossible, 2) * 100;

            if (score >= 90)
            {
                letterGrade = "A";
            }
            else if (score < 90 && score >= 80)
            {
                letterGrade = "B";
            }
            else if (score < 80 && score >= 70)
            {
                letterGrade = "C";
            }
            else if (score < 70 && score >= 60)
            {
                letterGrade = "D";
            }
            else
            {
                letterGrade = "F";
            }
            update(letterGrade);

            conn.Close();
            conn.Dispose();

        }
    }

public Boolean saveScore()
        {
            string connstring;
            connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
            SqlConnection conn = new SqlConnection(connstring);

        SqlCommand add = new SqlCommand("dbo.AddScore", conn);

        add.Parameters.Add("@enrollmentId", System.Data.SqlDbType.Int);
        add.Parameters["@enrollmentId"].Value = enrollmentId;
        add.Parameters.Add("@assignmentName", System.Data.SqlDbType.Char);
        add.Parameters["@assignmentName"].Value = assignmentName;
        add.Parameters.Add("@pointsPossible", System.Data.SqlDbType.Int);
        add.Parameters["@pointsPossible"].Value = pointsPossible;
        add.Parameters.Add("@pointsEarned", System.Data.SqlDbType.Int);
        add.Parameters["@pointsEarned"].Value = pointsEarned;

        add.CommandType = System.Data.CommandType.StoredProcedure;

        conn.Open();

        int outputval = add.ExecuteNonQuery();
        conn.Close();
        conn.Dispose();

        if (outputval == -1)
        {
            calculate();
            return true;
        }
        else
        {
            return false;
        }

    }



  private void update(string letterGrade)
    {
    string connstring;
    connstring = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
    SqlConnection conn = new SqlConnection(connstring);

    SqlCommand cmd = new SqlCommand("dbo.UpdateGrade", conn);

    cmd.Parameters.Add(new SqlParameter("@enrollmentId", enrollmentId));
    cmd.Parameters.Add(new SqlParameter("@letterGrade", letterGrade));

    cmd.CommandType = System.Data.CommandType.StoredProcedure;

    conn.Open();

    cmd.ExecuteNonQuery();

    conn.Close();
    conn.Dispose();

}
public void calculate()
{
字符串字母等级;
字符串连接字符串;
connstring=ConfigurationManager.ConnectionString[“dbConn”].ConnectionString;
SqlConnection conn=新的SqlConnection(connstring);
SqlCommand cmd=newsqlcommand(“dbo.GetScores”,conn);
Add(新的SqlParameter(“@enrollmentId”,courseId));
cmd.CommandType=System.Data.CommandType.StoredProcess;
使用(康涅狄格州)
{
conn.Open();
SqlDataReader=cmd.ExecuteReader();
reader.Read();
此处错误---->double TotalLearn=Convert.ToDouble(读卡器[“TotalLearn”]);
double totalable=Convert.ToDouble(读卡器[“totalable”]);
双倍分数=数学四舍五入(总收入/总可能,2)*100;
如果(分数>=90)
{
letterGrade=“A”;
}
否则如果(分数<90&&score>=80)
{
letterGrade=“B”;
}
否则如果(分数<80&&score>=70)
{
letterGrade=“C”;
}
否则如果(分数<70&&score>=60)
{
letterGrade=“D”;
}
其他的
{
letterGrade=“F”;
}
更新(等级);
康涅狄格州关闭();
conn.Dispose();
}
}
公共布尔存储分数()
{
字符串连接字符串;
connstring=ConfigurationManager.ConnectionString[“dbConn”].ConnectionString;
SqlConnection conn=新的SqlConnection(connstring);
SqlCommand add=newsqlcommand(“dbo.AddScore”,conn);
add.Parameters.add(“@enrollmentId”,System.Data.SqlDbType.Int);
add.Parameters[“@enrollmentId”]。Value=enrollmentId;
add.Parameters.add(“@assignmentName”,System.Data.SqlDbType.Char);
add.Parameters[“@assignmentName”].Value=assignmentName;
add.Parameters.add(“@pointspobsible”,System.Data.SqlDbType.Int);
add.Parameters[“@pointspobable”].Value=pointspobable;
add.Parameters.add(“@pointsEarned”,System.Data.SqlDbType.Int);
add.Parameters[“@pointsEarned”].Value=pointsEarned;
add.CommandType=System.Data.CommandType.StoredProcess;
conn.Open();
int outputval=add.ExecuteNonQuery();
康涅狄格州关闭();
conn.Dispose();
如果(outputval==-1)
{
计算();
返回true;
}
其他的
{
返回false;
}
}
私有无效更新(字符串letterGrade)
{
字符串连接字符串;
connstring=ConfigurationManager.ConnectionString[“dbConn”].ConnectionString;
SqlConnection conn=新的SqlConnection(connstring);
SqlCommand cmd=newsqlcommand(“dbo.UpdateGrade”,conn);
Add(新的SqlParameter(“@enrollmentId”,enrollmentId));
cmd.Parameters.Add(新的SqlParameter(“@letterGrade”,letterGrade));
cmd.CommandType=System.Data.CommandType.StoredProcess;
conn.Open();
cmd.ExecuteNonQuery();
康涅狄格州关闭();
conn.Dispose();
}
这是我的ASP:

<asp:Label ID="Label1" runat="server" Text="Select Semester"></asp:Label><br />
        <asp:DropDownList ID="DDSemesters" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDSemesters_SelectedIndexChanged" DataTextField="semesterName" DataValueField="semesterId"></asp:DropDownList><br />

        <asp:Label ID="CoursesLbl" runat="server" Text="Select Course" Visible="false"></asp:Label><br />
        <asp:DropDownList visible="false" ID="DDCourses" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDCourses_SelectedIndexChanged" DataTextField="courseName" DataValueField="courseId"></asp:DropDownList><br />

        <asp:Label ID="StudentLbl" runat="server" Text="Select Student" Visible="false"></asp:Label><br />
        <asp:DropDownList visible="false" ID="DDStudents" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DDStudents_SelectedIndexChanged" DataTextField="fullName" DataValueField="enrollmentId"></asp:DropDownList><br />

        <div id="assignmentInfoDiv" runat="server" visible="false" style="margin-top: 50px;">

            <asp:Label ID="studentName" runat="server" Text="Student Name" ></asp:Label>

            <asp:Label ID="AssignmentLbl" runat="server" Text="Assignment"></asp:Label><br />
            <asp:DropDownList ID="AssignmentList" runat="server">
                <asp:ListItem Text="Assignment 1"></asp:ListItem>
                <asp:ListItem Text="Assignment 2"></asp:ListItem>
                <asp:ListItem Text="Assignment 3"></asp:ListItem>
                <asp:ListItem Text="Assignment 4"></asp:ListItem>
                <asp:ListItem Text="Assignment 5"></asp:ListItem>
                <asp:ListItem Text="Assignment 6"></asp:ListItem>
                <asp:ListItem Text="Assignment 7"></asp:ListItem>
                <asp:ListItem Text="Assignment 8"></asp:ListItem>
                <asp:ListItem Text="Assignment 9"></asp:ListItem>
                <asp:ListItem Text="Assignment 10"></asp:ListItem>
                <asp:ListItem Text="Quiz 1"></asp:ListItem>
                <asp:ListItem Text="Quiz 2"></asp:ListItem>
                <asp:ListItem Text="Midterm Project"></asp:ListItem>
                <asp:ListItem Text="Final Project"></asp:ListItem>
            </asp:DropDownList>

            <asp:Label ID="earnedLbl" runat="server" Text="Points Earned:"></asp:Label>
            <asp:TextBox ID="earnedTxt" runat="server"></asp:TextBox>

            <asp:Label ID="possibleLbl" runat="server" Text="Points Possible:"></asp:Label>
            <asp:TextBox ID="possibleTxt" runat="server"></asp:TextBox>

            <asp:Button ID="SaveScore" runat="server" Text="Save" OnClick="SaveScore_Click" />
            <asp:Label ID="AssignmentError" runat="server"></asp:Label>
        </div>








我做错了什么?

GridView或任何其他数据感知控件的绑定部分在哪里?用更多代码更新了问题。您确定要将69作为courseId传入吗?使用该值运行时,存储过程是否返回数据?