C# Parameterabfrage MS SQL

someguy

Lieutenant
Registriert
Sep. 2004
Beiträge
550
Hallo,

ich werkele immer noch an meiner ASP Website und habe nun eine andere Frage.

Alter Thread

Ich gebe in 2 Textboxen Datum und Uhrzeit ein, füge diese zusammen zu einem "dd.mm.yyyy hh:mm" string.

Nach einem Klick auf einen Button möchte ich meine Datenbank so durchsuchen, dass er mir den Datensatz anzeigt, der im "DatumUhrzeit" Attribut den Wert vom string hat.
Zusätzlich soll auch noch nach einem anderen Wert gefiltert werden. Denn es gibt noch 3 Radio Buttons. Jeder Radio Button steht für eine Station. Und je nachdem welcher ausgewählt ist, soll halt derjenige Datensatz angezeigt werden.

Problem ist, ich weiß nicht wie ich den SQL Code dafür schreibe. Eigentlich soll es ja eine Parameterabfrage mit 2 Abfragewerten sein, ich kriege aber nichtmal eine hin für eine Parameterabfrage mit 1 Abfragewert.

So wäre ein string für eine Station zb:

Code:
SELECT (dbo.WetterDaten.DatumUhrzeit) AS Datum, dbo.WetterStation.Bezeichnung AS Station, dbo.WetterDaten.Luftdruck, dbo.WetterDaten.Temperatur, dbo.WetterDaten.Luftfeuchte FROM dbo.DRUCK_DEF INNER JOIN  dbo.WetterDaten ON dbo.DRUCK_DEF.DRUCK_DEF_ID = dbo.WetterDaten.DRUCK_DEF_ID INNER JOIN dbo.FEUCHTE_DEF ON dbo.WetterDaten.FEUCHT_DEF_ID = dbo.FEUCHTE_DEF.FEUCHT_DEF_ID INNER JOIN dbo.TEMP_DEF ON dbo.WetterDaten.TEMP_DEF_ID = dbo.TEMP_DEF.TEMP_DEF_ID INNER JOIN dbo.WetterStation ON dbo.WetterDaten.Station_ID = dbo.WetterStation.Station_ID GROUP BY dbo.WetterStation.Bezeichnung, dbo.WetterDaten.Luftdruck, dbo.WetterDaten.Temperatur, dbo.WetterDaten.Luftfeuchte HAVING(dbo.WetterStation.Bezeichnung = 'NG5') ORDER BY MAX(dbo.WetterDaten.DatumUhrzeit) DESC;

Mit der WHERE Klausel geht es hier glaub ich nicht, jedenfalls meckert er dann immer wegen einer Syntax.

Access würde hier sowas schreiben:

Code:
WHERE (((WetterStation.Bezeichnung)=[foo]) AND ((Wetterdaten.DatumUhrzeit)=[bar]));

Doch dies geht leider nit bei Visual Studio.
 
Ich denke du solltest dich erst einmal näher mit SQL ansich befassen bevor du versuchst so ein Programm zu schreiben!:freak:
schliesslich können wir dir nicht jede Abfrage schon fertig liefern!:rolleyes:
 
Ähm ich hab Ahnung von SQL oO

Nur hab ich halt ka, wie ich das jetzt hier in VS mache, da er keine WHERE/HAVING Klausel annehmen will, die ich angebe
 
Kannst du dir die Abfrage nicht im Management Studio zusammen bauen? Das geht doch dort ähnlich visuell wie in Access.
 
Code:
select bla.blub from tabelle where datumsspalten = :1 and checkboxdingens = :2

dann auf deinen DataAdapter oder SQLCommand mit .Parameters.Add

parameter mit den bezeichnungen "1" und "2" hinzufügen
 
@ichhalt123

Ne geht nit, syntax error wegen ":"

Dürft jetzt aber lachen, mir is die Methode eingefallen, die wohl so einfach ist, dass ich nit drauf gekommen bin oder ihr auch :)

Code:
"SELECT blabla FROM blabla GROUP BY blabla HAVING (Wetterstation.Bezeichnung = ' "+Wert1+' ") AND (WetterDaten.DatumUhrzeit = ' "+Wert2+" ')

Quasi einfach nen String zusammengebaut ;)

Nun habe ich aber eine andere Frage.

Die Datenbank hat ja nicht für jede Uhrzeit einen Datensatz. Meistens ist das **:01, **:11, **:21 etc. und nur manchmal wegen einem Ausfall oder so gehts **:02, **:12, **:22 etc.

Gibt es irgendeine Möglichkeit, dass wenn man nun zb 13:38 eingibt, er den nächstgelegenen Datensatz/Datensätze anzeigt? Hab irgendwie mal gedacht es gäbe ne Funktion wie NEAR aber ne.
 
vllt irgendwas mit Größer (>) oder Kleiner (<)
 
Das dürfte aber nur funktionieren, wenn der Datentyp des Feldes DateTime ist.
Ich würde bei solchen Sachen immer mit dem Longint Wert von Datumswerten rechnen. Da gibts in jeder Programmiersprache Umrechnungsfunktionen für und man kann den Bereich, in dem man suchen will, ziemlich gut angeben. Da sollte dann auch NEAR funktionieren.
 
Zurück
Oben