C#循环、SQL和检索信息
本文关键字:检索 信息 SQL 循环 | 更新日期: 2023-09-27 18:24:11
我的数据库中只有一个文件,来自第2组,当我试图检索第2组的最后5个文件时,我检索了4次这个文件?
我知道这是我循环中的一个问题,但我看不出用相同的ID检索4次相同文件的问题在哪里。
这是我使用的代码!
dynamic queryString = ("SELECT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group] FROM Files,Groups WHERE Files.[Group] = " + param + "ORDER BY Files.Id DESC");
SqlCommand theCommand = new SqlCommand(queryString, dbConnection);
dbConnection.Open();
SqlDataReader reader = theCommand.ExecuteReader();
int i = 0;
while (reader.Read())
{
i++;
HyperLink fileHl = new HyperLink();
fileHl.Text = reader["Name"].ToString();
fileHl.CssClass = "filelink" + i;
fileHl.ID = reader["Id"].ToString();
fileHl.NavigateUrl = String.Format("downloading.aspx?path={0}&file={1}", reader["Path"], reader["Name"]);
linktofiles.Controls.Add(fileHl);
linktofiles.Controls.Add(new LiteralControl("<br>"));
}
问题是您的查询(而不是循环):
"SELECT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group]
FROM Files,Groups
WHERE Files.[Group] = " + param +
"ORDER BY Files.Id DESC";
您需要在Files
和Groups
之间进行联接,否则您将执行CROSS JOIN
,并且将为Files
中的每一匹配行接收一行,乘以Groups
中的行。
事实上,您应该简单地删除Groups
,因为您没有从该表中选择任何内容:
"SELECT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group]
FROM Files
WHERE Files.[Group] = " + param +
"ORDER BY Files.Id DESC";
为了完整起见,请使用参数而不是串联文本。有助于避免SQL注入。
从您的选择中删除Groups
表。你没有使用它,也没有正确加入,所以它会给你带来不想要的结果。此外,不要使用dynamic
作为连接字符串的类型。使用string
。
dynamic queryString = ("SELECT DISTINCT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group] FROM Files,Groups WHERE Files.[Group] = " + param + "ORDER BY Files.Id DESC");