使用SQL数据读取器循环遍历SQL表中的所有值

本文关键字:SQL 遍历 数据 读取 循环 使用 | 更新日期: 2023-09-27 18:14:20

我想获取与下面查询相关的所有行,我的问题是只有一行检索不到所有行,我使用asp.net与c#和ado.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表并填充我的自定义数据。请帮忙!

使用SQL数据读取器循环遍历SQL表中的所有值

在第二个读取器上循环时,将从读取器中提取的值写入classname标签的Text属性。这将覆盖前面的文本,并留下最后检索到的老师的名字。您需要添加到前面的文本或使用List。

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

说了这么多,让我指出你代码中的一个大问题。在构建sql命令时,字符串连接非常糟糕。它会返回语法错误(如果输入文本包含单引号)或Sql注入,如这里所述

您应该使用这样的参数化查询(仅用于您的第一个命令)

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!!

你需要确保,你填充一个列表,一个数据集或其他,当读取数据!