Toon posts:

[ASP.Net] Datum error op engelse server.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hye mensen, misschien een simpel probleem om op te lossen, maar ik kom er ff niet uit.

Ik wil een datum opslaan in een access database. Nou werkt het perfect op mijn testservertje omdat die nederlands is. Ik sla de datum als volgt op: dd-MM-jjjj

ALs ik dit nu online wil proberen krijg ik een fout omdat de datum niet klopt. ik voer namelijk het volgende in: 14-03-2005. De test server doet dit goed. Maar de online server herkent dit als 14e maand, 3e dag. En dat kan natuurlijk niet.

Dus is het mogelijk om in een .Net een standaard aan te geven voor de datum?!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Zonder relevante code wordt het erg ingewikkeld om je een goed antwoord te geven. Ik heb zelf echter het vermoeden dat je dit simpel kunt oplossen door parametrized queries te gebruiken.

My personal website


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je zou het kunnen opslaan in engelse notatie mm/dd/jjjj in principe zou een nederlands server dat ook moeten snappen.
Misschien dat met ASP.net meer kan, heb ik geen ervaring mee, maar dit was een vrij irritant probleem met "klassiek" ASP. Je kan wel de locale voor iemands sessie veranderen maar de database blijft in de default system locale werken.

[ Voor 5% gewijzigd door Gert op 14-03-2005 12:51 ]


Verwijderd

Topicstarter
Ik gebruik parameters voor mn queries! Maar het ligt eraan hoe ik mijn invoer laat doen.
Ik zal nu kijken of ik het dan idd op zijn engels op kan slaan!

Ff kijken of ik dat voor elkaar kan krijgen, dan moet ik het er namelijk weer op zijn Nederlands uit krijgen :P

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op maandag 14 maart 2005 @ 12:57:
Ik gebruik parameters voor mn queries! Maar het ligt eraan hoe ik mijn invoer laat doen.
Ik zal nu kijken of ik het dan idd op zijn engels op kan slaan!

Ff kijken of ik dat voor elkaar kan krijgen, dan moet ik het er namelijk weer op zijn Nederlands uit krijgen :P
Daar heb je CurrentCulture voor

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • EnnaN
  • Registratie: September 2002
  • Laatst online: 04-05 08:12

EnnaN

Toys in the attic

ander sla je het in unix time op? dat is voor iedereen hetzelfde, en dat is overal en altijd met standaardfuncties terug te halen :)

....ik zou dat doen iig (zie ook http://en.wikipedia.org/wiki/Unix_time natuurlijk )

sig


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:40
Verwijderd schreef op maandag 14 maart 2005 @ 12:57:
Ik gebruik parameters voor mn queries! Maar het ligt eraan hoe ik mijn invoer laat doen.
Ik zal nu kijken of ik het dan idd op zijn engels op kan slaan!

Ff kijken of ik dat voor elkaar kan krijgen, dan moet ik het er namelijk weer op zijn Nederlands uit krijgen :P
Je slaat je datums toch niet op als VARCHAR / string / oid ofzo ?

En gebruik je wel DateTime variablen om de ingegeven datums mee te bewaren voordat je ze naar je DB gooit ?

https://fgheysels.github.io/


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

whoami schreef op maandag 14 maart 2005 @ 13:01:
[...]
Je slaat je datums toch niet op als VARCHAR / string / oid ofzo ?

En gebruik je wel DateTime variablen om de ingegeven datums mee te bewaren voordat je ze naar je DB gooit ?
Daar dacht ik ook meteen aan. Ik vermoed dat de TS zijn datums doorgeeft als strings. Dan gaat de parametrized query er niet voor zorgen dat de juiste gegevens in de database komen. Probeer het eens met een parameter van het type DateTime?

En gebruik je Access parameters, of stel je een query samen met vraagtekens en 'vul je die in' door OleDbParameters mee te geven aan je command?

[ Voor 14% gewijzigd door OZ-Gump op 14-03-2005 13:06 ]

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:40
OZ-Gump schreef op maandag 14 maart 2005 @ 13:04:
[...]

Daar dacht ik ook meteen aan. Ik vermoed dat de TS zijn datums doorgeeft als strings. dan gaat de parametrized query er niet voor zorgen dat de juiste gegeevns in de database komen. Probeer het eens met een parameter van het type DateTime?
Niet alleen dat, ook de column waarin je die datum gaat bewaren moet van het type DATETIME zijn, en de variable die de waarde bevat moet ook een datetime zijn:

code:
1
2
3
4
5
6
sqlQuery = "UPDATE tabel SET deadline = @p_DeadLine WHERE ... ";
...

sqlCommand1.Parameters.Add ("@p_DeadLine", SqlDbType.DateTime);

sqlCommand1.Parameters["@p_DeadLine"].Value = theDeadLine;


In bovenstaand voorbeeld moeten dus zowel de column deadline in de tabel 'tabel', en de variable theDeadline van een datum-type zijn.

Hmm, ok, je gebruik access; dan moet je SqlClient overal door OleDb gaan vervangen enzo...

[ Voor 9% gewijzigd door whoami op 14-03-2005 13:07 ]

https://fgheysels.github.io/


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Niet alleen dat, ook de column waarin je die datum gaat bewaren moet van het type DATETIME zijn, en de variable die de waarde bevat moet ook een datetime zijn:
klopt, maar omdat de TS het heeft over foutmeldingen dat de datum niet klopt, ging ik er wel even van uit dat hij zijn kolom op DateTime heeft staan ;)

Ontopic: heeft de TS al antwoorden gevonden?

My personal website


Verwijderd

Topicstarter
1 probleem met de datum heb ik opgelost. Ik sla gewoon bij een update de datum op mbv Now();

Maar nu heb ik ook een tekstveld waarmee de gebruiker een datum aan kan geven.
Deze doet dat dus op de Nederlandse manier: 14-03-2005.

Via de volgende code zet ik deze string om naar een datum:
code:
1
2
3
4
5
Dim dateDatumHer as Date = Ctype(txtDatumHer.Text, Date)

[...]

OleDbCmnd.Parameters.Add("@DatumHer", OleDb.OleDbType.Date).Value = dateDatumHer

Dan krijg ik op mijn testsysteem geen foutmelding maar op de online server:
Cast from string "14-03-2005" to type "Date" is not valid

[ Voor 14% gewijzigd door Verwijderd op 14-03-2005 13:36 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Is er een reden waarom je dat niet met bijvoorbeeld een Calendar-control doet? Die zou dat probleem voor je kunnen oplossen.
Verder zou je natuurlijk naar Gorgi_19 zijn post kunnen kijken en met CurrentCulture aan de slag gaan.

My personal website


Verwijderd

Topicstarter
OZ-Gump schreef op maandag 14 maart 2005 @ 13:42:
Is er een reden waarom je dat niet met bijvoorbeeld een Calendar-control doet? Die zou dat probleem voor je kunnen oplossen.
Verder zou je natuurlijk naar Gorgi_19 zijn post kunnen kijken en met CurrentCulture aan de slag gaan.
Omdat de gebruiker heel simpel even een datum op moet geven. Dan heb ik toch niet percé een calender-control nodig?

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:40
Verwijderd schreef op maandag 14 maart 2005 @ 13:34:
1 probleem met de datum heb ik opgelost. Ik sla gewoon bij een update de datum op mbv Now();

Maar nu heb ik ook een tekstveld waarmee de gebruiker een datum aan kan geven.
Deze doet dat dus op de Nederlandse manier: 14-03-2005.

Via de volgende code zet ik deze string om naar een datum:
code:
1
2
3
4
5
Dim dateDatumHer as Date = Ctype(txtDatumHer.Text, Date)

[...]

OleDbCmnd.Parameters.Add("@DatumHer", OleDb.OleDbType.Date).Value = dateDatumHer
Waarom gebruik je niet Convert.ToDateTime ipv CType ?

Natuurlijk, de gebruiker heeft die datum in in het formaat dat hij zelf gewend is; de server zal echter die datum gaan parsen mbhv de settings die ingesteld staan op de server.
Met Convert.ToDatetime kan je opgeven welke Culture-Settings er moeten gebruikt worden, en met Request.UserLanguages kan je een culture gaan opbouwen adhv de browser-settings van de user.

Echter, dit systeem is nog altijd niet waterdicht. Wat je zou kunnen doen, is op je webpage aangeven in welk formaat de gebruiker die datum moet ingeven.

[ Voor 31% gewijzigd door whoami op 14-03-2005 14:16 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op maandag 14 maart 2005 @ 14:13:
[...]

Waarom gebruik je niet Convert.ToDateTime ipv CType ?

Natuurlijk, de gebruiker heeft die datum in in het formaat dat hij zelf gewend is; de server zal echter die datum gaan parsen mbhv de settings die ingesteld staan op de server.
Met Convert.ToDatetime kan je opgeven welke Culture-Settings er moeten gebruikt worden, en met Request.UserLanguages kan je een culture gaan opbouwen adhv de browser-settings van de user.

Echter, dit systeem is nog altijd niet waterdicht. Wat je zou kunnen doen, is op je webpage aangeven in welk formaat de gebruiker die datum moet ingeven.
Dat geeft: String was not recognized as a valid DateTime

  • Tyf
  • Registratie: December 2002
  • Laatst online: 28-11-2025

Tyf

Ik heb heel het zelfde probleem gehad als de TP.
Ik heb dit opgelost door te werken met CultureInfo.
Je leest de datum in als string, zet deze om naar een date met US als cultureinfo (dus bv US notatie)
en dan sla je hem op in de db als (mm/dd/yy). Uitlezen doe je dan omgekeerd zet datum weer om van US naar europese notatie.
Zoek daar meer eens op (momenteel op werk en ken de code die ik gebruikte niet vanbuiten)

edit:
Lap ik zie juist dat deze oplossing al gegeven was :)
anyway hij werkt gebruik hem zelf

[ Voor 11% gewijzigd door Tyf op 14-03-2005 14:28 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

@Submove: volgens mij gebruik je de CultureInfo niet. Mijn notebook staat ingesteld op Nederlands, en verwacht dus een Nederlandse datumopmaak. Wanneer ik een ASP.Net app maak met de volgende twee regels code, kan ik de datum in het Engels opgeven, en converten naar een datum, zonder problemen...

C#:
1
2
  DateTime datUS = System.Convert.ToDateTime(TextBox1.Text, new CultureInfo( "en-US", false ).DateTimeFormat);
  Response.Write(dat.ToString());
PS wel even System.Globalization usen natuurlijk...

My personal website


Verwijderd

Topicstarter
OZ-Gump schreef op maandag 14 maart 2005 @ 14:31:
@Submove: volgens mij gebruik je de CultureInfo niet. Mijn notebook staat ingesteld op Nederlands, en verwacht dus een Nederlandse datumopmaak. Wanneer ik een ASP.Net app maak met de volgende twee regels code, kan ik de datum in het Engels opgeven, en converten naar een datum, zonder problemen...

C#:
1
2
  DateTime datUS = System.Convert.ToDateTime(TextBox1.Text, new CultureInfo( "en-US", false ).DateTimeFormat);
  Response.Write(dat.ToString());
PS wel even System.Globalization usen natuurlijk...
Ok thx, hier moet ik wat mee kunnen!!! Bedankt voor de moeite! ik had al zitten kijken met die Convert maar dan zonder die cultureinfo!!!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Als je echt snel quick en dirty wil doen moet je de LCID even veranderen, google er maar op dan snap je het wel.

Verwijderd

Topicstarter
OZ-Gump schreef op maandag 14 maart 2005 @ 14:31:
C#:
1
2
  DateTime datUS = System.Convert.ToDateTime(TextBox1.Text, new CultureInfo( "en-US", false ).DateTimeFormat);
  Response.Write(dat.ToString());
PS wel even System.Globalization usen natuurlijk...
Nou ik ben dus eens aant pielen gegaan met die CultureInfo.
Ik heb in de Global.asax de volgende regel geplaatst bij Application_Request
code:
1
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US", True)


Als ik nu een Response.Write(Now()) doe krijg ik een mooie engels/amerikaanse opmaak.
Maar doe ik nou het bovenstaande:
code:
1
Dim strDate As DateTime = System.Convert.ToDateTime("14-03-2004", New CultureInfo("en-US", True).DateTimeFormat)


Dan krijg ik nog steeds de melding: De tekenreeks is niet als geldige DateTime herkend.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

afaik is 14-03-2004 ook geen geldige en-US datum format.

Verder heb je Thread.CurrentCulture en Thread.CurrentUICulture, zit ook een klein verschil in :)

[ Voor 48% gewijzigd door gorgi_19 op 14-03-2005 22:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op maandag 14 maart 2005 @ 22:03:
afaik is 14-03-2004 ook geen geldige en-US datum format.

Verder heb je Thread.CurrentCulture en Thread.CurrentUICulture, zit ook een klein verschil in :)
Haha, maar dat die datum niet geldig is wist ik al wel :P Daarom ben ik nu ook aant klooien. De oplossing die gegeven was werkt dus niet.... Is het dan wel mogelijk om die datum om te zetten???

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op maandag 14 maart 2005 @ 22:06:
[...]


Haha, maar dat die datum niet geldig is wist ik al wel :P Daarom ben ik nu ook aant klooien. De oplossing die gegeven was werkt dus niet
Erhm.. Nee. Je probeert hem ook wijs te maken dat het datumformaat en-us is, wat het niet is.

[ Voor 8% gewijzigd door gorgi_19 op 14-03-2005 22:08 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok, dan ben ik dus nog steeds op zoek naar een oplossing. Met googlen kan ik het ook niet vinden. Ik heb nu maar snel een oplossing bedacht waarmee ik met substringetjes die datum ff ombouw tot het juiste formaat. Maar dat is natuurlijk niet netjes.

  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
Verwijderd schreef op maandag 14 maart 2005 @ 22:01:
[...]
Maar doe ik nou het bovenstaande:
code:
1
Dim strDate As DateTime = System.Convert.ToDateTime("14-03-2004", New CultureInfo("en-US", True).DateTimeFormat)


Dan krijg ik nog steeds de melding: De tekenreeks is niet als geldige DateTime herkend.
Je doet het ook precies verkeerd om. De inhoud van een DateTime struct is cultuur-onafhankelijk. Als je die in een parameterized query stopt in een datetime veld dan komt er altijd een goede datum in de database. Dus wat je moet doen is een Nederlands formaat datum string in een DateTime krijgen. De manier waarop je dat doet, is de CurrentCulture op nl-NL zetten en dan de Nederlandse string converteren met DateTime.Parse/Convert.ToDateTime.

Dus in de Global.asax Application_BeginRequest:
code:
1
Thread.CurrentThread.CurrentCulture = New CultureInfo("nl-NL")


Dan in je code:
code:
1
myCommand.Parameters.Add("@date", OleDbType.DateTime).Value = DateTime.Parse("14-03-2004")


Als je geen DateTimeFormatInfo meegeeft bij DateTime.Parse, pakt die DateTimeFormatInfo van de culture die ingesteld is in de CurrentCulture.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

@Submove: de oplossing die geboden is werkt wel, maar je gebruikt hem verkeerd om! Ik had een Nederlands ingesteld notebook en wilde een Engelse datum ingeven. Daarom heb ik de CultureInfo op "en-US" gezet, zodat mijn Nederlandse notebook een Engelse datum begrijpt.

Jij moet echter op een Engelse server de Nederlandse datum kunnen gebruiken. Jij moet de CultureInfo dus op "nl-NL" zetten en dan de System.Convert.ToDateTime gebruiken met de DateTimeFormat van de CultureInfo.

edit:
Damn, moet niet meer zo lang over mijn post doen ;)

[ Voor 10% gewijzigd door OZ-Gump op 14-03-2005 22:43 ]

My personal website


Verwijderd

Topicstarter
Cool, ik ga morgen meteen proberen, zit nu niet meer op mn pc dus kan morgen het resultaat pas bekijken!

Verwijderd

Verwijderd schreef op maandag 14 maart 2005 @ 12:47:
Ik wil een datum opslaan in een access database. Nou werkt het perfect op mijn testservertje omdat die nederlands is. Ik sla de datum als volgt op: dd-MM-jjjj

ALs ik dit nu online wil proberen krijg ik een fout omdat de datum niet klopt. ik voer namelijk het volgende in: 14-03-2005. De test server doet dit goed. Maar de online server herkent dit als 14e maand, 3e dag. En dat kan natuurlijk niet.

Dus is het mogelijk om in een .Net een standaard aan te geven voor de datum?!
Dit heeft niets met .Net of regionale settings te maken.

[ASP/Access] Datum conversie

[ Voor 1% gewijzigd door Verwijderd op 15-03-2005 22:06 . Reden: typo ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Je kunt ook (ASP van IIS6, weet niet of t in .NET ook werkt?) deze functie gebruiken om de datum te formatten alvorens hem op te slaan:

code:
1
2
3
4
5
Function GetDate(strDate)

  GetDate=Month(strDate) & "/" & Day(strDate) & "/" & Year(strDate)

End Function


Of zo:

code:
1
2
3
4
5
Function GetDate(strDate)

  GetDate=Day(strDate) & "-" & Month(strDate) & "-" & Year(strDate)

End Function


Of denk ik nu te simpel?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:52

gorgi_19

Kruimeltjes zijn weer op :9

Daarmee breng je wel je complete localization om zeep.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 00:08
Vaak slikt de DBMS het altijd goed als je de datum als yyyy-mm-dd ingeeft, ongeacht de landinstellingen!

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Topicstarter
Bedankt jongens, tis me eindelijk gelukt met die CultureInfo!
Pagina: 1