C# 为什么我的asp c代码中没有数据?
我有一张作业表。我想得到注册学生获得的总分数以及该学生可能获得的总分数。我有一个asp类,它计算字母等级,并用字母等级更新数据库中的注册记录。当没有数据存在时,我不断得到错误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
无效的读取尝试。
我已经指出了错误发生的那一行
这是我的作业表:
如您所见,注册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传入吗?使用该值运行时,存储过程是否返回数据?