| |
ADO.NET / DatenbankenDatumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 14.11.12 16:03 |
| Hallo zusammen,
ich komme gerade nicht weiter...
Folgende Situation.
Ich habe Datensätze, die mit einem "Date" Feld versehen sind in einer SQLite Datenbank.
Diese Daten möchte ich gerne gefiltert in meinem VB.net Programm aufrufen.
Es sollen allerdings nur die Daten ausgegeben werden, die eine bestimmte Datumsgrenze erreicht haben.
Derzeit verwende ich folgenden Code für das Vorhaben (Auf Seite SQL).
cmd.CommandText = "select distinct contact_exhibit from contacts where" & _
"contact_date >= " & converted_start_date & " order by contact_exhibit asc" Man mag sich jetzt über das "converted" vor Start Date wundern.
Dies stammt daher, dass wenn ich das Datum aus der SQL DB ziehe und es abgleiche mit einer "Date" Variable (start_date) aus VB ich die Rückmeldung bekomme, dass ich eine Ungültige Syntax verwende.
folgende Lösung habe ich gefunden um dem Fehler beizukommen.
'Es sollen nur eine bestimmte Anzahl Einträge gezeigt werden
'Die Einträge die angezeigt werden, sollen nicht älter als
' age_of_entries Monate sein
start_date = DateAdd(DateInterval.Month, -age_of_entries, Date.Today)
'Um das Datum in einer Datenbankabfrage zu nutzen, muss es entsprechend
' umformatiert werden
'Das ist zwar unverhältnismäßig kompliziert, leider habe ich aber
' keinen anderen Weg!
converted_start_date = Convert.ToDateTime(start_date).ToString( _
"dd-MM-yyyy") Das Problem ist aber in dieser Lösung, dass kein Abgleich von dem Datum aus VB mit dem Datum aus SQL stattfindet und er einfach alle Einträge anzeigt. (Klar, da ich das converted_start_datum auf dd-MM-yyyy konvertiere aber ein dd.MM.yyyy in der SQL Datenbank habe).
Ich hoffe, dass von euch jemand mein Problem nachvollziehen und eventuell lösen kann!
Danke! | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: FZelle (Moderator) | Datum: 14.11.12 18:20 |
| Dein Problem wird hier in ca 10% aller Postings hier beantwortet.
Benutze die ParameterCollection des Commands und du musst dich nicht um die richtige Konvertierung kümmern. | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 19.11.12 12:41 |
| Moin FZelle,
danke für die schnelle Antwort.
Habe das Problem unter dem Stichwort jetzt einige male gefunden, doch kann ich es nicht zum funktionieren bringen.
Derzeit siehts so aus...
start_date = DateAdd(DateInterval.Month, -age_of_entries, Date.Today)
'entsprechende Connection Command
cmd.Parameters.AddWithValue("@start_date", start_date)
cmd.CommandText = "select distinct contact_exhibit from contacts where" & _
"contact_date >= @start_date order by contact_exhibit asc" Da die Ergebnisse totaler mist sind, habe ich einmal die cmd.commandtext ausgeben lassen und die sieht so aus....select distinct contact_exhibit from contacts where contact_date >= _
@start_date order by contact_exhibit asc Es ist also kein Wert an der Stelle von @start_date, sondern er sucht in den Datumsfeldern nach "@start_date" selbst.
Ich komme auch mithilfe der bereits geposteten Themen dazu nicht weiter und bitte darum nochmals um Hilfe.
Danke! | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: FZelle (Moderator) | Datum: 19.11.12 13:10 |
| Da hast du aber etwas komplett falsch verstanden.
Die Parameter werden nicht in den SqlString eingefügt, sondern dieser wird genau so wie Du ihn siehst übertragen und die Parameter werden extra übertragen.
Das ist es doch, was dieses Prinzip nicht nur Konvertierungsunabhängig macht, sondern zusätzlich gegen SqlInjections hilft.
Zitat: | | Da die Ergebnisse totaler mist sind, | |
Das ist keine Fehlerbeschreibung.
Wie sieht die Tabellendefinition aus? | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 19.11.12 13:33 |
| Eine Fehlermeldung bekomme ich "leider" nicht.
Er gibt mir einfach alle Datenbankeinträge aus (da das Datum von allen Einträgen größer ist als "@start_date").
Wie würde denn meine Abfrage mit Parametern aussehen (wenn nicht so, wie ich sie gemacht habe)? | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: Micke | Datum: 19.11.12 15:25 |
| würde @start_date falsch, also bspw. leer übergeben werden, käme es zum fehler,
an der Abfrage liegt es also eher nicht.
bist dir sicher daß start_date deiner erwartung entspricht ?
Micke | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 19.11.12 15:33 |
| Hi Micke,
start_date hat den Wert 19.08.2012 (Entsprechend heute - 3 Monate).
Ist soweit korrekt. | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: FZelle (Moderator) | Datum: 19.11.12 16:02 |
| Du weist also das alle Datensätze zur Abfrage passen und wunderst dich das die Abfrage alle auch liefert? | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 19.11.12 16:10 |
| Das sollte ich aufklären...
Die Datensätze sind teilweise neuer als dieses Datum und teilweise älter.
Er dürfte entsprechend auf keinen Fall alle Datensätze ausgeben. | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: FZelle (Moderator) | Datum: 20.11.12 10:35 |
| Dann lies dir bitte deine Postings nochmal durch.
Und nun noch einmal, wie sieht das DB Schema aus? | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: oli2008 | Datum: 20.11.12 11:00 |
| Hallo gzi,
bei mir funktioniert der Datumsabgleich, aber ich muss mein Datum in einem anderen Format eingeben:
yyyy-mm-dd also genau andersrum wie du oben angegeben hast.
Oliver | |
Re: Datumsabgleich SQlite und VB.net | | | Autor: gzi | Datum: 20.11.12 11:11 |
| Moin, hier die DB:
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
contact_name TEXT NOT NULL,
contact_surname TEXT NOT NULL,
contact_email TEXT NOT NULL,
contact_plz INT(5) NOT NULL,
contact_interest TEXT NOT NULL,
contact_date DATE NOT NULL,
contact_exhibit TEXT NOT NULL | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|