2016-05-19 12 views
0

我想从数据库中的表中检索值,但不能这样做。我有数据库中的值仍然无法检索窗口的形式

这里是我的代码

int crs_Id = Convert.ToInt32(Session["crs_id"]); 

SqlDataReader r1, r2, r3; 

con.Open(); 

SqlCommand cmd2 = new SqlCommand("Select Course_Title, Description from COURSE where course_ID='" + crs_Id + "'", con); 
r1 = cmd2.ExecuteReader(); 

Label5.Text = r1["Course_Title"].ToString(); 
Label6.Text = r1["Description"].ToString(); 

r1.Close(); 

SqlCommand cmd3 = new SqlCommand("Select Tutor_ID from Teaching where course_ID='" + crs_Id + "'", con); 

r2 = cmd3.ExecuteReader(); 

if (r2.Read()) 
{ 
    int tutor = Convert.ToInt32(r2["Tutor_ID"]); 
    r2.Close(); 

    SqlCommand cmd4 = new SqlCommand("Select Tutor_Name from TUTOR where Tutor_Id='" + tutor + "'", con); 

    r3 = cmd4.ExecuteReader(); 

    Label7.Text = "Tutor Name is " + r3["Tutor_Name"].ToString() + ""; 
    r3.Close(); 
} 
else 
    r2.Close(); 

我收到的异常,如屏幕截图

enter image description here

+0

'crs_Id'和'tutor'数字或字符串?尝试删除撇号。另外,查看“参数化”的概念......它可以帮助您避免很多错误和安全问题。 –

+0

您正在使用对SQL注入攻击较弱的动态查询。你最好使用参数化查询和存储过程。 –

回答

1

你得到,因为你不读的第一行到错误从ExecuteReader返回的SqlDataReader。您可以检查r1.HasRows属性,并仅在返回行时访问列。您还需要执行r1.Read()以获取第一行。

r1 = cmd2.ExecuteReader(); 
if (r1.HasRows) 
{ 
    r1.Read(); 
    Label5.Text = r1["Course_Title"].ToString(); 
    Label6.Text = r1["Description"].ToString(); 
} 
else 
{ 
    Label5.Text = ""; 
    Label6.Text = ""; 
} 
相关问题