使用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表并填充我的自定义数据。请帮忙!
在第二个读取器上循环时,将从读取器中提取的值写入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!!
你需要确保,你填充一个列表,一个数据集或其他,当读取数据!