Цикл C#, SQL и получение информации
У меня есть только 1 файл в моей базе данных, из группы 2, и когда я пытаюсь получить 5 последних файлов этой группы номер 2, я получаю этот файл 4 раза ?
Я знаю, что это проблема в моем цикле, но я не вижу, где проблема извлечения 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 ответов:
Удалите таблицу
Groupsиз вашего выбора. Вы не используете его, и вы не соединяетесь правильно, поэтому он даст вам нежелательные результаты. Кроме того, не используйтеdynamicв качестве типа строки подключения. Используйтеstring.
Проблема заключается в вашем запросе (а не в вашем цикле):
"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-инъекции.
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");
Comments