Moin,
ich möchte eine Tabelle oder eine Zeile aus meiner Datenbank lesen,
und zwar folgende Select-Anfrage
SELECT avg( temp),avg( humidity), avg(wetness), sum(rain)
FROM hourlyWeather
WHERE (day > @actualDay)
GROUP BY day
ORDER BY day
Diese Anfrage ist unter MS VisualStudio Express eingegeben und
mit einer Fill und Get Methode ausgestattet.
Folgender Code ergibt eine leere Zeile, obwohl Daten erscheinen müssten:
SimulationDataSet.hourlyWeatherDataTable dailyWeatherTable = new SimulationDataSet.hourlyWeatherDataTable();
weatherTableAdapter.FillDailyWeather(dailyWeatherTable, actualDay);
DataRow dailyWeatherRow = dailyWeatherTable.Rows[0];
MessageBox.Show(dailyWeatherRow[1].ToString() + " | " + dailyWeatherRow[0].ToString() + " | " + dailyWeatherRow[2].ToString());
Selbst wenn die WHERE-Clausel weggelassen wird erscheinen keine Daten.
Was mache ich falsch?!?
DANKE
MAtthias
Hi Klaus,
also an dem SQL kann ich nichts "Böses" erkennen 🙂
Das einzige ist, dass man bei "group by" besser mit "having" statt "where" arbeitet. Aber wie Du schreibst, hast Du das "where" ja bereits weggelassen.
Probier auch mal aus:
select day, sum( rain) from hourlyWeather group by day
wenn da auch nichts kommt, mach doch mal SQL innerhalb des Management Studios (Express).
Melde Dich, was Du rausgefunden hast.
Gruß Hape
Microsoft SQL Server Management Studio Express:
http://www.microsoft.com/downloads/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=de
Das einzige ist, dass man bei "group by" besser mit "having" statt "where" arbeitet.
Das würde ich nicht. Die Where Stimmt auf jedenfall. da "kürzt" du mal alles weg von der tabelle was nicht brauchbar / relevant ist. mit having gehst du nur in die einzelnen gruppierungen und selektierst noch was du nich bracuhst.
Bsp:mit deinem Statement
Table: day x y
23 c s
24 n m
24 a g
25 b h
Sql Fängt ja mit der From table Where Klausel an: tabelle Hourly Weather dann alles weg wo day < @actualDay.
dann bleibt dir mal wenn actualDay = 23:
24 n m
24 a g
25 b h
group by day:
24 n m
a g
25 b h
und having würde dann auf einzelnen grupperiungen gehen.
DeFakto Fehler muss woanders liegen. Um sicher zu gehen für das select statement direkt auf der Db aus. Sollten da Fehler sein schreit er eh. bester test.
Diese Anfrage ist unter MS VisualStudio Express eingegeben und mit einer Fill und Get Methode ausgestattet.
was meinst du damit?
Woher kommt:
weatherTableAdapter.FillDailyWeather(dailyWeatherTable, actualDay);
Ich denke mal es handelt sich um einen System.Data.SqlClient.DataAdapter oder hast Du einen eigenen Adapter implemtiert?
weatherTableAdapter.Fill(dailyWeatherTable);
Jörg