[MSSQL] Datum problemen

Pagina: 1
Acties:

  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Hoi mede tweakers,

Nadat een collega van mij een stel vage updates heeft gedaan op de sqlserver
binnen ons bedrijf werken verschillende datum functies niet meer.

b.v: een insert query met Date.Now() in een smalldatetime veld.
dit werkte voorheen uitstekend nu blijf ik steeds een error krijgen als:
code:
1
2
The conversion of char data type to smalldatetime data type resulted in an 
out-of-range smalldatetime value.


Nu heb ik al uit gevonden dat als ik de GetDate() functie van SQLServer zelf gebruik dat er dan nix aan de hand is.

Kan iemand mij hier in wegwijs maken en mischien tips of wat help verschaffen, ik ben de weg even kwijt :?

trouwens ik had al iets gehoord over in de query analyzer
ik heb even dbcc useroptions dit was het resultaat
code:
1
2
3
4
5
6
7
8
9
10
11
12
textsize    64512
language    Nederlands
dateformat  dmy
datefirst   1
quoted_identifier   SET
arithabort  SET
ansi_null_dflt_on   SET
ansi_defaults   SET
ansi_warnings   SET
ansi_padding    SET
ansi_nulls  SET
concat_null_yields_null SET

[ Voor 24% gewijzigd door CrazyFool op 26-04-2004 15:14 . Reden: Extra informatie ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Kijk eerst eens even welke range datums een smalldatetime veld aan kan. Voor zover ik me herinner, kan een smalldatetime field geen datums opslaan van voor 1970.

Wat returned Date.Now() ? Wat wordt er daar verteld iv m die char - data ? Prop je een datum als een character in een datumveld?

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Waarschijnlijk stuur je het in dd/mm/jjjj formaat en verwacht sql server het bijv. in mm/dd/jjjj (of andersom).

Kan het zijn dat je collega de SET DATEFORMAT functie heeft gebruikt? Deze functie stelt nl. in in welk formaat SQL Server een datumstring verwacht. Of dat de locale settings op de server zijn gewijzigd?

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


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Dit is Date.Now(): 4/26/2004 3:15:23 PM
dit is mijn testcode:
code:
1
2
3
4
Dim queryString As String = "INSERT INTO [test] ([datetest], [datetest2]) 
VALUES (GetDate(), '" + Date.Now() + "')"
            
Velden zijn datetime & smalldatetime


Het is mij geheel onduidelijk hoe dit zomaar ineens kan veranderen..

//Edit zie startpost voor de DATEFORMAT informatie (DBCC useroptions)

[ Voor 22% gewijzigd door CrazyFool op 26-04-2004 15:19 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
zie je wel?

Date.Now() geeft het in mm/dd/jjjj formaat en in je eerste post zie ik dat de dateformat van sql server op dmy staat.

Dus de locale settings van de PC die Date.Now() genereert zijn gewijzigd of de dateformat settings van de sql server.

onderstaande code zou dit probleem moeten oplossen, maar je moet wel kijken dit wel de wijziging was, anders sloop je misschien weer andere programma's
code:
1
SET DATEFORMAT mdy
Voor zover ik me herinner, kan een smalldatetime field geen datums opslaan van voor 1970.
1900 geloof ik

[ Voor 13% gewijzigd door P_de_B op 26-04-2004 15:21 ]

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


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
grr quote ipv edit

nog een lief modje die deze wil trashen? O+

[ Voor 92% gewijzigd door P_de_B op 26-04-2004 15:22 ]

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Ahh, je zet quotes rond je datum, dus wordt die datum als een string aanzien. Dan moet hij idd aan het DATEFORMAT voldoen dat ingesteld is.

Als je je SQL statement niet mbhv string concatenation opbouwt, en gebruik maakt van parametrized queries, dan ben je ook van dit probleem (en nog een paar andere) verlost.

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Een andere optie is om datums altijd in het formaat yyyymmdd mee te geven. Dat werkt altijd.

En dit zegt Book Online over smalldatetime:
Date and time data from January 1, 1900, through June 6, 2079, with an accuracy of one minute.

[ Voor 47% gewijzigd door cameodski op 26-04-2004 15:25 ]

Never underestimate the power of


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
cameodski schreef op 26 april 2004 @ 15:23:
Een andere optie is om datums altijd in het formaat yyyymmdd mee te geven. Dat werkt altijd.
Ook als DATEFORMAT op dmy ingesteld staat ? :?

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
whoami schreef op 26 april 2004 @ 15:24:
[...]


Ook als DATEFORMAT op dmy ingesteld staat ? :?
Volgens mij wel inderdaad.

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


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Ok bedankt ik ben alweer een klein stapje verder
Ik heb de dbcc van P_de_B uitgevoerd en de quote's rond Date.Now() in de query weggehaald echt krijg ik nu weer een ander soort error
wellicht is iemand bekend met deze error.
code:
1
System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '3'.


Mischien regionale settings op de server ofzo? Om maar eens even een deurtje in te trappen.?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Parametrized queries in .NET
:z

[ Voor 60% gewijzigd door whoami op 26-04-2004 15:27 ]

https://fgheysels.github.io/


Verwijderd

Je dateformat staat op DMJ, je probeert datum 4/26/2004 daar in te zetten. Nu kan ik mij vergissen, maar volgens mij bestaat er geen 26e maand !

Uit ervaring weet ik dat je door de datum als YYYY-MM-DD door te geven ( in vb6 d.m.v. format$(date,"yyyy-mm-dd") je eigenlijk nooit fout kan gaan, hoe het datumformaat ook staat ingesteld in de DB.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
CrazyFool schreef op 26 april 2004 @ 15:26:
Ik heb de dbcc van P_de_B uitgevoerd en de quote's rond Date.Now() in de query weggehaald echt krijg ik nu weer een ander soort error
Nee, ga niet je quotes weghalen. Een datum moet altijd tussen quotes staan.
Mischien regionale settings op de server ofzo? Om maar eens even een deurtje in te trappen.?
Voorkom dat je afhankelijk wordt van de regional settings op de server. Dus gebruik de parametrized queries, zoals whoami zegt of gebruik het formaat yyyymmdd als je het als string wilt doorgeven.
Verwijderd schreef op 26 april 2004 @ 15:28:
Je dateformat staat op DMJ, je probeert datum 4/26/2004 daar in te zetten. Nu kan ik mij vergissen, maar volgens mij bestaat er geen 26e maand !

Uit ervaring weet ik dat je door de datum als YYYY-MM-DD door te geven ( in vb6 d.m.v. format$(date,"yyyy-mm-dd") je eigenlijk nooit fout kan gaan, hoe het datumformaat ook staat ingesteld in de DB.
In dit geval werkt het toch echt niet als je het formaat yyyy-mm-dd gebruikt. :+

[ Voor 31% gewijzigd door cameodski op 26-04-2004 15:31 ]

Never underestimate the power of


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
cameodski schreef op 26 april 2004 @ 15:29:
[...]

Nee, ga niet je quotes weghalen. Een datum moet altijd tussen quotes staan.
Mjah, dan heb je het nadeel dat ie dat als string kan aanzien. Dan zet je er imo nog beter een CONVERT rond.

https://fgheysels.github.io/


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
whoami schreef op 26 april 2004 @ 15:30:
[...]

Mjah, dan heb je het nadeel dat ie dat als string kan aanzien. Dan zet je er imo nog beter een CONVERT rond.
Hoe wil je dat dan doen?
De TS geeft dit veld als string door en als hij dan een insert doet, wordt de string automatisch ge-cast naar een smalldatetime. Als dat tenminste kan, want anders komt er vanzelf een leuke foutmelding.

Never underestimate the power of


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Mensen ik blijf die error krijgen no matter what I do.... alleen GetDate() van mssql lijkt te werken.

Het is net alsof er iets is gewijzigd in de datum....
Ik heb net gekeken op de server en daar stonden de datums op
MM/dd/yyyy

Dit lijkt mij niet geheel fout?
Er zit hier ergens geheel iets in de knoop maar wat damzzz
dit is echt zwaar vervelend. :(

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:25
Heb je dat stukje over param. queries al eens gelezen?
heb je het al eens uitgetest?

Nee? Doen.

https://fgheysels.github.io/


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Net gedaan whoami :)
code:
1
2
3
4
5
        Dim dbParam_datum As System.Data.IDataParameter = New System.Data.SqlClient.SqlParameter
        dbParam_datum.ParameterName = "@datum"
        dbParam_datum.Value = Date.Now()
        dbParam_datum.DbType = System.Data.DbType.DateTime
        dbCommand.Parameters.Add(dbParam_datum)

en in de sql query @datum gedaan
alleen ik zou graag zonder me complete programma aan te passen (500 bestanden ofzo :P) alles weer te laten draaien zoals het was,
door mischien de oude instellingen weer terug te kunnen vinden, mischien nog een paar tips?

[ Voor 6% gewijzigd door CrazyFool op 26-04-2004 15:43 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
CrazyFool schreef op 26 april 2004 @ 15:38:
Mensen ik blijf die error krijgen no matter what I do.... alleen GetDate() van mssql lijkt te werken.

Het is net alsof er iets is gewijzigd in de datum....
Ik heb net gekeken op de server en daar stonden de datums op
MM/dd/yyyy

Dit lijkt mij niet geheel fout?
Er zit hier ergens geheel iets in de knoop maar wat damzzz
dit is echt zwaar vervelend. :(
Er zijn al 3 oplossingen gegeven.
Je dateformat staat om mdy en je stuurt de datum als dmy, als je het als jmd stuurt lukt het sowieso. Daarnaast kun je het als jmd sturen en nog beter is om parameterized queries te gebruiken.

Je hebt deze alle drie geprobeerd, en ze werken allemaal niet???

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


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verder kun je ook nog op onderstaande manier je datumformaat wijzigen:
code:
1
SET LANGUAGE Dutch

of
code:
1
SET LANGUAGE English

Ook kun je in de Enterprise Manager controleren wat de default taal is die bij je login staat ingesteld.

Never underestimate the power of


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 12:50
Wil ik toch even tegen je eerst punt ingaan
Mijn datumformaat staat nu idd op mdy mijn datum geeft terug Date.Now(): 4/26/2004 3:15:23 PM

dit is ook mdy lijkt mij?

parameterized query's lijken nu te lukken
en jmd zal ik zo ff uitzoeken
allemaal bedankt ik heb weer wat stof om even verder te prutsen :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Ik lees steeds dat je Now() wilt gaan invoeren. Waarom gebruik je dan niet de GetDate() functie van / in SQL Server? Heb je ook geen probleem met het invoeren van de datum.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1