Idő formátum probléma

Idő formátum probléma
2018-03-04T20:38:10+01:00
2018-03-05T20:46:29+01:00
2022-12-05T03:50:36+01:00
hmmulder
Sziasztok!

Adatbázisból feltöltök egy DataGridView táblát, majd, ha kijelölök egy sort, akkor eltárolom string-ben az idő értékét és ezt a string-et akarom felhasználni egy új lekérdezéshez.
Ha egyszerűen, a visszakapott értéket írom be a WHERE kifejezés után feltételként, akkor az alábbi hibaüzenetet kapom: "Típuselérési hiba a feltételkifejezésben."
h:mm:ss formában tároltam el az időt (pl.: 3:04:05).
Ha az alábbi kódokkal megpróbálom átalakítani, akkor már az átalakítás sem sikerül:

DateTime date = DateTime.ParseExact(kijeloltAdatok[1], "yyyy. MM. dd. HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture); //vagy a végét átírva: System.Globalization.CultureInfo.InvariantCulture
Akkor az "A karakterlánc nem értelmezhető érvényes DateTime értékként." hibaüzenetet kapom. Illetve, ha csak simán az alábbi formátummal próbálkozom: HH:mm:ss, akkor is az előbbi üzenetet kapom.

Hogyan tudnám lekérdezni az időt? Illetve az eltárolásnál fontos lenne, hogy pl Hosszú idő legyen a formátuma?

Segítségeteket előre is köszönöm!
Mutasd a teljes hozzászólást!
Helló!

1. Linq egy nagyon hasznos eszköz, ha komolyan akarsz programozni, meg kell tanulni. Alapesetben a használata nem bonyolultabb, mint egy lekérdezést írni: ha az megy, menni fog a Linq is.

2. Esetünkben nincs szó Linq-ről, az is csak egy a sok lehetőség közül.

Összedobtam és mellékeltem egy példaprogramot, hogy lásd, miről szól az adatkötés. Ami a lényeg: nem kiszedi és konvertálgatja a kiválasztott értéket string-ből, hanem megkeresi a hozzátartozó forrásadatot (DataBoundItem), és abból közvetlenül vesszük az eredeti DateTime objektumot (a példában születési dátum).

A példában listából lett feltöltve a DataGridView, de azt feltöltheted bármiből: adatbázisból, Linq lekérdezésből, DataTable-ből stb.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Ez elvi problémának hangzik.

    Normál esetben az adatokat, itt konkrétan az idő (DateTime) típusodat kötnöd kéne (bind) a DataGridView-hoz, kijelölés vagy bármilyen más interakció esetén pedig a forrásadatokra kéne hivatkozni és onnan dolgozni, konverzió nélkül. Erre példák itt.

    Tehát semmi keresnivalója nem kéne, hogy legyen string átalakításnak a történetben. Egyedül a megjelenést szabadna csak formáznod string formájában a GridView-n.
    Mutasd a teljes hozzászólást!
  • Linq-kel még nem foglalkoztam, ez nekem kicsit bonyolultnak tűnik, jelenleg :/
    A DGV adatai alapján, több oszlopban végeznék lekérdezést (mint az eredeti lekérdezés) és ezért kellene az idő is, hogy pontosabb adatokat kapjak vissza (ha az első lekérdezés alapján 2 azonos adat lenne a második lekérdezés alapján).
    Linq nélkül meg lehet oldani valahogy? :)
    Mutasd a teljes hozzászólást!
  • En is szivtam hasonlo dologgal, de en a datumot nem tudtam keresni. Mas formatumot hasznal a .net es az SQL. Teljesen mindegy hogy adom meg a datumot, ha stringben van nem hajlando az sql elfogadni, ezert visszarakom datumra es ugy keresek. Irtam magamnak ket funkciot, azota mindig azokat hasznalom. 
    Probald ki hatha megoldja a problemad:

    String DBDateToStr(Object sdate) { return ((DateTime)sdate).ToString("dd-MM-yyyy HH:mm:ss"); } DateTime StrToDBDate(string edate) { return DateTime.ParseExact(edate, "dd-MM-yyyy HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); }
    Ertelemszeruen at kell irnod a sajat formatumodra.
    Mutasd a teljes hozzászólást!
  • Helló!

    1. Linq egy nagyon hasznos eszköz, ha komolyan akarsz programozni, meg kell tanulni. Alapesetben a használata nem bonyolultabb, mint egy lekérdezést írni: ha az megy, menni fog a Linq is.

    2. Esetünkben nincs szó Linq-ről, az is csak egy a sok lehetőség közül.

    Összedobtam és mellékeltem egy példaprogramot, hogy lásd, miről szól az adatkötés. Ami a lényeg: nem kiszedi és konvertálgatja a kiválasztott értéket string-ből, hanem megkeresi a hozzátartozó forrásadatot (DataBoundItem), és abból közvetlenül vesszük az eredeti DateTime objektumot (a példában születési dátum).

    A példában listából lett feltöltve a DataGridView, de azt feltöltheted bármiből: adatbázisból, Linq lekérdezésből, DataTable-ből stb.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • A StrToDBDate rutinod ugyan azt csinálja, mint az enyém, amit próbáltam.
    Viszont megvan a hiba! Ha HH:mm:ss formátumot írok be, akkor nem fut le, viszont, ha H:mm:ss formátumot, akkor tovább megy (utóbbi formában van eltárolva az érték :/ ). Így viszont a lekérdezés futtatásánál kapom a "Típuselérési hiba a feltételkifejezésnél üzenetet".
    A WHERE után hiába úgy adom meg, hogy idő formátumként, nem pedig string-ként, mégis ezt az üzenetet kapom.
    Mutasd a teljes hozzászólást!
  • Szia!

    Lehet, hogy hasznos, nem is volt kétségem felőle! :) Annyi, hogy egyelőre csak hobbiból programozgatok és ebbe nem akartam belemerülni.
    pl: OleDbCommand-ot és OleDbDataReader-t használok jelenleg.
    Letöltöttem a zip-et, köszi :) majd áttanulmányozom :)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd