Цикл 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>"));
}
624   3  

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

    Ничего не найдено.