2013-05-17 29 views
1

我想獲取該與下面的查詢中所有行SQL表中的所有值,我的問題只有一行retrived不是所有的行,IAM使用asp.net C#和ado.net和我的代碼邏輯是循環通過使用SQL數據讀取器

if (!IsPostBack) 
{ 
    string username = Session["username"].ToString(); 
    con.Open(); 
    string strqryScript = "select * from dbo.teachers where user_id = '" + username + "'"; 
    SqlCommand cmd = new SqlCommand(strqryScript, con); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    rdr.Read();   
    string name = rdr["teach_id"].ToString(); 
    rdr.Close(); 

    string query = "select * from dbo.teacher_classes where teach_id = '" + name + "' ORDER BY class_id"; 
    SqlCommand cmd2 = new SqlCommand(query, con); 
    SqlDataAdapter da2 = new SqlDataAdapter(cmd2); 
    SqlDataReader rdr2 = cmd2.ExecuteReader(); 
    while (rdr2.Read()) 
    { 
     classname.Text = rdr2["class_id"].ToString(); 
    } 
    con.Close(); 
} 

額外的注意,我可以使用GridView控件綁定數據,但我想,以填補我的表從多個表中的自定義信息,所以我想用一個HTML表格,並與我的自定義數據填充。請任何幫助!並感謝..

+2

是否缺少的功課標籤? –

+0

什麼是'classname'? –

+0

類名稱爲標籤 –

回答

4

雖然在第二循環的讀者,你寫的關於classname標籤的Text屬性讀者中提取的值。這將覆蓋以前的文本,併爲您提供檢索的最後一位教師的姓名。您需要添加到以前的文本或使用列表。

classname.Text += rdr2["class_id"].ToString(); 

說的是,讓我指出你在你的代碼中的一個大問題。當您構建sql命令時,字符串連接非常糟糕。它給你背語法錯誤(如果輸入的文本包含單引號)或SQL注入as explained here

您應該使用參數化查詢,像這樣(只爲您的第一個指令)

string strqryScript = "select * from dbo.teachers where user_id = @id"; 
SqlCommand cmd = new SqlCommand(strqryScript, con); 
cmd.Parameters.AddWitValue("@id", username); 
.... 
+0

史蒂夫thx您的意見和答案,你也是對的 –

0

這是你需要的問題修復:

classname.Text = rdr2["class_id"].ToString(); <== always setting the same text!! 

你需要確保你讀取數據時填充列表,集或什麼的,!