dkqmail
(Dkqmail)
29 Luty 2012 20:04
#1
Witam
Programuję w Visual Studio 2005 aplikację wykorzystującą bazę danych i mam pytanie?
Jak zbudować zapytanie SQL, aby zostało zwróconych 10 wyników w zakresach np. 1 - 10, 11 - 20 itp.
SELECT * FROM Test LIMIT 1,10
Próbując wykonać w/w zapytanie otrzymuję błąd.
SqlConnection connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
connection.Open();
SqlCommand command = new SqlCommand("SELECT * FROM Test LIMIT 1,10", connection);
SqlDataReader reader = command.ExecuteReader();
connection.Close();
Fragment kodu do połączenia z bazą danych.
Proszę o pomoc w rozwiązaniu problemu.
nie wiem w czym jest problem, zapytanie jest dobre, może lepiej
SELECT * FROM Test LIMIT 0,10
zapytanie to zwróci 10 pierwszych rekordów, teraz trzeba je przeszukać readerem
reader.Read();
to będzie odczyt 1 rekordu, teraz pętelka i wyciągasz to co chcesz. przykładowo może to wyglądać tak:
reader.Read();
if (reader.HasRows)
{
List lista = new List();
while (reader.Read())
lista.Add(reader["tutaj_nazwa_kolumny_ktora_chcesz_pobrac"].ToString());
}
reader.Close();
somekind
(somekind)
29 Luty 2012 23:25
#3
No właśnie problem jest w tym, że zapytanie jest złe, bo w MSSQL nie ma czegoś takiego jak LIMIT.
Sierpik
(Sierpik)
1 Marzec 2012 08:10
#4
Jest coś takiego SELECT TOP(10) * FROM Tabela
ale nie można wybrać coś w postaci 10 elementów, zaczynając od 20.
ok, faktycznie nie ma, ale nie było precyzji na MSSQL, sam się nie domyśle, to że visual studio i c# to nie oznacza mssql
z tego co pamiętam to jest coś takiego
SELECT * FROM tabela WHERE nazwa_kolumny BETWEEN 20 AND 30
grzelix
(Grzelix)
1 Marzec 2012 11:22
#6
@kowal.luk Between sprawdza wartości natomiast limit z mysql poprostu pobiera określoną liczbę rekordów.
trochę skomplikowane zapytanie ale działa, jak będe miał chwilę to sprawdzę może coś mniej skomplikowanego napiszę.
SELECT TOP 10 * FROM
(SELECT TOP 60 *
FROM tabela
ORDER BY column DESC) A
ORDER BY column ASC
somekind
(somekind)
1 Marzec 2012 14:10
#7
kowal.luk:
ok, faktycznie nie ma, ale nie było precyzji na MSSQL, sam się nie domyśle, to że visual studio i c# to nie oznacza mssql
Nie trzeba się domyślać, wystarczy przeczytać kod z pierwszego postu:
SqlConnection connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
Od razu widać, że to połączenie do MSSQL Express Edition. dkqmail , spróbuj tak:
select * from (select row_number() over (order by Id) as rownum, * from Test
) as O where O.rownum between (1) and (10)
dkqmail
(Dkqmail)
1 Marzec 2012 14:14
#8
Problem rozwiązało zapytanie:
SELECT TOP 20 * FROM Test WHERE id not in (SELECT TOP 10 id FROM Test ORDER BY id) ORDER BY id
Dziękuję za pomoc.