簡體   English   中英

使用sql數據讀取器遍歷sql表中的所有值

[英]loop through all values in sql table using sql data reader

我想獲取與下面的查詢相關的所有行,我的問題是只有一行不是所有的行,iam使用帶有c#和ado.net的asp.net,我的代碼邏輯是

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表並用我的自定義數據填充它。 請幫忙! 並謝謝..

在第二個閱讀器上循環時,可以在classname標簽的Text屬性上寫入從閱讀器中提取的值。 這將覆蓋以前的文本,並為您提供檢索到的最后一位教師的姓名。 您需要添加到以前的文本或使用列表。

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

說,讓我指出你的代碼中的一個大問題。 構建sql命令時,字符串連接非常糟糕。 它為您提供了語法錯誤(如果您的輸入文本包含單引號)或Sql Injection ,如此處所述

您應該使用這樣的參數化查詢(僅適用於您的第一個命令)

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

這是您需要解決的問題:

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

在閱讀數據時 ,您需要確保填寫列表,數據集或其他內容!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM