2016-05-19 13 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 = ""; 
} 
相關問題