[C# .NET] Datumweergave

Pagina: 1
Acties:
  • 921 views sinds 30-01-2008
  • Reageer

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 09:10
in mijn C# ASP.Net-pagina wil ik door middel van een editveld een datum uit de database tonen. Als de datum wordt gewijzigd, moet deze opnieuw naar de database worden weggeschreven. Door middel van een RangeValidator wordt gecontroleerd of een geldige datum wordt ingevoerd.

Achter het editveld heb ik een label "lblDateFormat" geplaatst, waarmee de datumnotatie op de webserver wordt weergegeven:
C#:
1
lblDateFormat.Text = DateTimeFormatInfo.CurrentInfo.ShortDatePattern.ToString();
Bij mij geeft deze als output "d-M-yyyy", de Nederlandse notatie dus.

Vul ik in het editveld de datum "14-2-2003" in en schrijf ik deze datum weg naar de database, dan krijg ik de volgende foutmelding:
System.FormatException: String was not recognized as a valid DateTime. at System.DateTimeParse.GetDayOfNNY(DateTimeResult result, DateTimeRawInfo raw, DateTimeFormatInfo dtfi) at System.DateTimeParse.ProcessTerminaltState(Int32 dps, DateTimeResult result, DateTimeRawInfo raw, DateTimeFormatInfo dtfi) at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) at System.DateTime.Parse(String s, IFormatProvider provider, DateTimeStyles styles) at System.DateTime.Parse(String s, IFormatProvider provider) at System.Convert.ToDateTime(String value, IFormatProvider provider) at System.String.System.IConvertible.ToDateTime(IFormatProvider provider) at System.Convert.ToDateTime(Object value) at System.Data.Common.DateTimeStorage.Set(Int32 record, Object value) at System.Data.DataColumn.set_Item(Int32 record, Object value)Couldn't store <14-2-2003> in DATEOFBIRTH Column. Expected type is DateTime.
Als ik de datum volgens de Amerikaanse notatie "2-14-2003" naar de database wil wegschrijven, dan sputtert de RangeValidator tegen. De RangeValidator gaat uit van de datumnotatie die volgens het label wordt gdefinieerd.

Weet iemand hoe ik dit kan oplossen?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 26-05 23:39

mulder

ik spuug op het trottoir

Converteer je die lblDateFormat.Text wel naar een Date?

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je stopt je datum als string in je databank, dat gaat dus niet goed werken.

Hoe bewaar je die datum in je databank, maw, laat eens wat relevante code zien hoe je de UPDATE of INSERT doet. Je kan ook eens kijken naar parametrized queries, dan zal dit probleem zich niet voordoen:

code:
1
2
3
4
5
6
MySqlCommand.CommandText = "UPDATE tabel SET gebdatum = @p_datum WHERE id = @p_id";
MySqlCommand.Parameters.Add ("@p_datum", SqlDbType.DateTime);
MySqlCommand.Parameters.Add ("@p_id", SqlDbType.Int);
MySqlCommand.Parameters["@p_datum"].Value = Convert.ToDateTime(txtDatum.Text);
MySqlCommand.Parameters["@p_id"].Value = 1;
MySqlCommand.ExecuteNonQuery();


(Zie ook de FAQ trouwens).

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Misschien is het handig op het volgende in je .config bestand te zetten:
code:
1
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="nl-NL" uiCulture="nl-NL"/>


En verder lijkt het mij beter om dan de inhoud van je TextBox te converteren naar een DateTime type.
code:
1
DateTime datum = Convert.ToDateTime(txtDatum.Text);

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Riegstar schreef op 23 januari 2004 @ 10:04:
Misschien is het handig op het volgende in je .config bestand te zetten:
code:
1
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="nl-NL" uiCulture="nl-NL"/>
Niet handig, hiermee ga je je culture gaan vastleggen.
Wat als een Engelsman ofzo die site bezoekt, en hij wil de datum in zijn datumformaat zien ?

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Is waar..
Maar dat kan je oplossen met de String.Format() functie.

De vraag van TS was, dat hij de datum volgens het nederlands-formaat in wil voeren en dat de database dat niet slikt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Waarom moeilijk doen, en de culture gaan hard-coden als het ook makkelijk kan met parametrized queries?
Het datum formaat zal automatisch goedgezet worden in de DB.

Als je daarnaast je CurrentCulture en CurrentUICulture niet hardcoded in je config file zet, kan je ze in je web-app bv. zo zetten:
code:
1
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(Request.UserLanguages[0]);


En als je dan dit doet:
code:
1
aDatum.ToString();

dan wordt hij automatisch in het gewenste formaat getoond.

https://fgheysels.github.io/


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

whoami schreef op 23 januari 2004 @ 10:51:
Waarom moeilijk doen, en de culture gaan hard-coden als het ook makkelijk kan met parametrized queries?
Het datum formaat zal automatisch goedgezet worden in de DB.

Als je daarnaast je CurrentCulture en CurrentUICulture niet hardcoded in je config file zet, kan je ze in je web-app bv. zo zetten:
code:
1
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(Request.UserLanguages[0]);
Das handig dat met die Request.UserLanguage. Weer wat geleerd.
whoami schreef op 23 januari 2004 @ 10:51:
code:
1
aDatum.ToString();

dan wordt hij automatisch in het gewenste formaat getoond.
Je bedoeld:
code:
1
aDatum.ToShortDateString();

Anders krijg je de tijd er ook nog bij.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Whatever, ik wou gewoon aantonen dat de datum in het gewenste formaat getoond wordt als je de CultureInfo niet hard-coded in je web.config file zet.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
whoami schreef op 23 januari 2004 @ 11:16:
Whatever, ik wou gewoon aantonen dat de datum in het gewenste formaat getoond wordt als je de CultureInfo niet hard-coded in je web.config file zet.
offtopic:
Daarom krijg ik dus de site van Eurodisney (volgens mij was het die): "You're coming from the UK, you're now redirected to our UK site" of zoiets. Je moet wel heel zeker weten dat het klopt, als je dit gebruikt, of in ieder geval de gebruiker de mogelijkheid moeten geven het te wijzigen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
P_de_B schreef op 23 januari 2004 @ 11:22:
[...]


offtopic:
Daarom krijg ik dus de site van Eurodisney (volgens mij was het die): "You're coming from the UK, you're now redirected to our UK site" of zoiets. Je moet wel heel zeker weten dat het klopt, als je dit gebruikt, of in ieder geval de gebruiker de mogelijkheid moeten geven het te wijzigen.
Idd, als je Taal-instellingen niet goed staan in je browser kan dat problemen opleveren.
Het beste zou eigenlijk zijn dat de gebruiker zelf een keuze kan maken in welke taal ofzo hij wil werken.

https://fgheysels.github.io/


Verwijderd

heb t probleem ook gehad met het wegschrijven... het beste kan je in je database materiaal schrijven in de vorm:

YYYY/MM/DD hh:mm

dat snaptie altijd... dus dan ben je ook niet meer afhankelijk van de datbase en user language...

Je zou via de convert string van de datum mee geven datie hem op die manier moet converteren.. en dat snaptie ook (heb ik dus ook moeten doen ,want me sql server wisselde dus ook steeds die zooi om!)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 23 januari 2004 @ 13:32:
Je zou via de convert string van de datum mee geven datie hem op die manier moet converteren.. en dat snaptie ook (heb ik dus ook moeten doen ,want me sql server wisselde dus ook steeds die zooi om!)
Als je parametrized queries gebruikt, hoef je je daar niks meer van aan te trekken.
Trouwens, hoe SQL Server die datums opslaat , zal jou toch een zorg wezen? Je moet er gewoon voor zorgen dat hij de waarden die jij als maanden ziet, ook als maanden gaat beschouwen.

https://fgheysels.github.io/

Pagina: 1