C# 循环、SQL 和检索信息

标签 c# sql database loops

我的数据库中只有第 2 组的 1 个文件,当我尝试检索第 2 组的最后 5 个文件时,我检索了该文件 4 次?

我知道这是我循环中的问题,但我看不出检索 4 次具有相同 ID 的相同文件的问题在哪里。

这是我使用的代码!

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

您需要在 FilesGroups 之间进行联接,否则您将执行 CROSS JOIN 并且将为 中的每个匹配行接收一行code>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 注入(inject)。

关于C# 循环、SQL 和检索信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258719/

相关文章:

database - 在使用带有 Postgres 的 Go sqlx 包运行 UPDATE 查询时,您能否检索更新行的列表?

sql - 如何在 MS-SQL 中对同一列的不同值使用计数函数?

c# - [Computed] 和 [Write(false)] 属性之间有什么区别?

c# - 如何为 Func 创建最小起订量模拟

c# - 重置表单中的所有项目

sql - 从数组中获取下一个项目

mysql - 选择 2 周/天的时间戳间隔

database - 客户端数据库场景中的行级安全性

c# - UseNpgsql 在 .NET Core 的 IServiceCollection 中不可用

mysql - 在mysql数据库中随机获取特定实体的记录