C#循环,SQL和检索信息

时间:2012-02-13 10:14:03

标签: c# sql database loops

我的数据库中只有1个文件,来自第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>"));
                }

3 个答案:

答案 0 :(得分:4)

问题是你的查询(而不是你的循环):

"SELECT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group] 
FROM Files,Groups 
WHERE Files.[Group] = " + param + 
"ORDER BY Files.Id DESC"; 

您需要FilesGroups之间的联接,否则您正在执行CROSS JOIN并且会在FilesGroups次中的每个匹配行收到一行1}}。

事实上,您只需删除Groups,因为您没有从该表中选择任何内容:

"SELECT Files.Id, Files.Name, Files.Date, Files.Path, Files.[Group] 
FROM Files
WHERE Files.[Group] = " + param + 
"ORDER BY Files.Id DESC"; 

为了完整性,请使用参数而不是连接文本。有助于避免SQL注入。

答案 1 :(得分:2)

从您的选择中删除Groups表。您没有使用它,并且您没有正确加入,因此它会给您带来不必要的结果。此外,请勿使用dynamic作为连接字符串的类型。使用string

答案 2 :(得分:0)

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");