Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

date est rendue différemment sur 2 ordinateurs avec même configuration régionale

9 réponses
Avatar
Mark
Bonjour,

la même application tourne sur deux pc indépendants:
le 1e est un Windows XP prof. sp2 IIS 5.1, version néeralandaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

le 2e est un Windows server 2003 sp2 IIS 6.0, version anglaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

Jusqu'ici pas de différence.

L'application utilise un detailsview qui permets l'Update des données.
La date dans le detailsview est rendue correctement (13-08-07 dû au
formattage, voyez le code) sur les deux ordinateurs.
Mais si je clique sur le bouton Updating et la date est p.ex. 14-08-07, l'XP
effectue le changement sans problème, tandis que le server 2003 dit: "could
not convert string to datatime: out-of-range value".

J'ai essayé avec String.Format("{0:yyyy.MM.dd}" dans le code-behind, mais
sans succès.

Mes questions:
1) Pourquoi la conversion d'un string vers une date se passe bien avec le XP
et provoque une erreur avec le server 2003? La seule différence entre les
deux est la langue de la version (néerlandais et anglais), mais la
configuration regionale est la même (French (Belgium).
A croire qu'il y a plusieurs version de conversion, mais alors sur base de
quoi?
2) comment résoudre le problème du server 2003?

Le code-behind:

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
DetailsView1.ItemUpdating
....
e.NewValues("datbeg") = String.Format("{0:yyyy.MM.dd}", datbeg)
....

the aspx file:
<asp:SqlDataSource ....
UpdateCommand="UPDATE [mytable] SET [datbeg] = @datbeg">
<UpdateParameters>
<asp:Parameter Name="datbeg" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>

<asp:DetailsView ....>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>' ></asp:TextBox>
</EditItemTemplate>
...

Un autre exemple:

sql = "select datbeg from mytable"
....
dtreader.Read()
datb = dtreader.GetDateTime(0).Date

=> avec XP: 13/07/2007
=> avec server 2003: 7/13/2007 !!!

Merci
Marc

9 réponses

Avatar
Jean BONBEUR
dans la class Convert, (qui utilise DateTime.Parse) le seul biais qui peut
expliquer ça, c'est le CultureInfo.CurrentCulture.
maintenant, il faudrait en savoir plus... genre comment la date est elle
pasée à SqlServer ? si la date est passée par une concatenation à la chaine
sql, dégager ça, et utiliser un SqlParameter. si l'erreur vient lors de la
traduction du texte saisi dans la feuille web en date, la, il y'a plus de
possibilités, mais c'est certainement la langue de l'appli...

voila
Avatar
Mich
Merci de répondre.

La date est passée par parametre.
Quelle différence y-a-t'il entre la configuration régionale au niveau
windows et CultureInfo? Sql server interprête correctement les dates
(dd-mm-yy), aspnet aussi. Alors, sur quoi se base la conversion d'un string
vers une date?

Merci

"Jean BONBEUR" schreef in bericht
news:
dans la class Convert, (qui utilise DateTime.Parse) le seul biais qui peut
expliquer ça, c'est le CultureInfo.CurrentCulture.
maintenant, il faudrait en savoir plus... genre comment la date est elle
pasée à SqlServer ? si la date est passée par une concatenation à la
chaine sql, dégager ça, et utiliser un SqlParameter. si l'erreur vient
lors de la traduction du texte saisi dans la feuille web en date, la, il
y'a plus de possibilités, mais c'est certainement la langue de l'appli...

voila



Avatar
Jean BONBEUR
sauf erreur de ma part, la culture intervient à plein d'endroits. settings,
app config, windows, thread...
donc ça peut venir de pas mal d'endroit.

ou sinon, c'est le format de date. c'est pas dd-mm-yy, mais dd-MM-yy
vu que mm représente les minutes et non le mois.

mais je recommande de ne pas passer par des string. c'est une aberation de
formatter une traduction alors que la couche Data le fait pour nous et
correctement.
La preuve ; en passant un parameter de type DateTime, ça serait pas arrivé
ce bug.



"Mich" a écrit dans le message de news:
%
Merci de répondre.

La date est passée par parametre.
Quelle différence y-a-t'il entre la configuration régionale au niveau
windows et CultureInfo? Sql server interprête correctement les dates
(dd-mm-yy), aspnet aussi. Alors, sur quoi se base la conversion d'un
string
vers une date?

Merci

"Jean BONBEUR" schreef in bericht
news:
dans la class Convert, (qui utilise DateTime.Parse) le seul biais qui
peut expliquer ça, c'est le CultureInfo.CurrentCulture.
maintenant, il faudrait en savoir plus... genre comment la date est elle
pasée à SqlServer ? si la date est passée par une concatenation à la
chaine sql, dégager ça, et utiliser un SqlParameter. si l'erreur vient
lors de la traduction du texte saisi dans la feuille web en date, la, il
y'a plus de possibilités, mais c'est certainement la langue de l'appli...

voila







Avatar
Gilles TOURREAU
Le Wed, 08 Aug 2007 23:07:01 +0200, Mark a écrit:

Bonjour,

la même application tourne sur deux pc indépendants:
le 1e est un Windows XP prof. sp2 IIS 5.1, version néeralandaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

le 2e est un Windows server 2003 sp2 IIS 6.0, version anglaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

Jusqu'ici pas de différence.

L'application utilise un detailsview qui permets l'Update des données.
La date dans le detailsview est rendue correctement (13-08-07 dû au
formattage, voyez le code) sur les deux ordinateurs.
Mais si je clique sur le bouton Updating et la date est p.ex. 14-08-07,
l'XP
effectue le changement sans problème, tandis que le server 2003 dit:
"could
not convert string to datatime: out-of-range value".



Quel est le type d'exception ? Ou se passe l'exception exactement ?


J'ai essayé avec String.Format("{0:yyyy.MM.dd}" dans le code-behind, mais
sans succès.

Mes questions:
1) Pourquoi la conversion d'un string vers une date se passe bien avec
le XP
et provoque une erreur avec le server 2003? La seule différence entre les
deux est la langue de la version (néerlandais et anglais), mais la
configuration regionale est la même (French (Belgium).
A croire qu'il y a plusieurs version de conversion, mais alors sur base
de
quoi?
2) comment résoudre le problème du server 2003?

Le code-behind:

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e
As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
DetailsView1.ItemUpdating
....
e.NewValues("datbeg") = String.Format("{0:yyyy.MM.dd}", datbeg)
....

the aspx file:
<asp:SqlDataSource ....
UpdateCommand="UPDATE [mytable] SET [datbeg] = @datbeg">
<UpdateParameters>
<asp:Parameter Name="datbeg" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>

<asp:DetailsView ....>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>' ></asp:TextBox>
</EditItemTemplate>
...

Un autre exemple:

sql = "select datbeg from mytable"
....
dtreader.Read()
datb = dtreader.GetDateTime(0).Date

=> avec XP: 13/07/2007
=> avec server 2003: 7/13/2007 !!!



Pouvez-vous indiquez comment vous avez affiché les dates dans ce test ?


Merci
Marc






Pour éviter ce genre de problème, il est conseillé de respecter une des
règles jamais respecté et préconisé par Microsoft :

http://msdn2.microsoft.com/en-us/library/fb34ed9a-4eab-47cc-8eef-3068a4a1397e(vs.80).aspx

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
David
Quel est le type d'exception ? Ou se passe l'exception exactement ?

"could not convert string to datatime: out-of-range value".
cela se passe lorsqu'on clique sur le bouton Update du detailsview alors que
la date est p.ex. 17/08/2007. C'est clair que la date est interprêtée comme
le 17è mois ... Mais pourquoi puisque sql server et asp.net l'interprête
correctment?

le code:
lb1 = CType(dvr.FindControl("label2"), Label).Text 'label2 contient la
date provenant de sql server
dats1 = DateTime.Parse(lb1)
...
ViewState("dats1") = dats1 'je la passe dans viewstate car il y a un
postback et donc la valeur est perdue

dats1 = ViewState("dats1") 'la conversion échoue ici






"Gilles TOURREAU" schreef in bericht
news:
Le Wed, 08 Aug 2007 23:07:01 +0200, Mark a écrit:

Bonjour,

la même application tourne sur deux pc indépendants:
le 1e est un Windows XP prof. sp2 IIS 5.1, version néeralandaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

le 2e est un Windows server 2003 sp2 IIS 6.0, version anglaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est aussi:
13/08/2007.

Jusqu'ici pas de différence.

L'application utilise un detailsview qui permets l'Update des données.
La date dans le detailsview est rendue correctement (13-08-07 dû au
formattage, voyez le code) sur les deux ordinateurs.
Mais si je clique sur le bouton Updating et la date est p.ex. 14-08-07,
l'XP
effectue le changement sans problème, tandis que le server 2003 dit:
"could
not convert string to datatime: out-of-range value".



Quel est le type d'exception ? Ou se passe l'exception exactement ?


J'ai essayé avec String.Format("{0:yyyy.MM.dd}" dans le code-behind, mais
sans succès.

Mes questions:
1) Pourquoi la conversion d'un string vers une date se passe bien avec
le XP
et provoque une erreur avec le server 2003? La seule différence entre les
deux est la langue de la version (néerlandais et anglais), mais la
configuration regionale est la même (French (Belgium).
A croire qu'il y a plusieurs version de conversion, mais alors sur base
de
quoi?
2) comment résoudre le problème du server 2003?

Le code-behind:

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e
As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
DetailsView1.ItemUpdating
....
e.NewValues("datbeg") = String.Format("{0:yyyy.MM.dd}", datbeg)
....

the aspx file:
<asp:SqlDataSource ....
UpdateCommand="UPDATE [mytable] SET [datbeg] = @datbeg">
<UpdateParameters>
<asp:Parameter Name="datbeg" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>

<asp:DetailsView ....>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>' ></asp:TextBox>
</EditItemTemplate>
...

Un autre exemple:

sql = "select datbeg from mytable"
....
dtreader.Read()
datb = dtreader.GetDateTime(0).Date

=> avec XP: 13/07/2007
=> avec server 2003: 7/13/2007 !!!



Pouvez-vous indiquez comment vous avez affiché les dates dans ce test ?


Merci
Marc






Pour éviter ce genre de problème, il est conseillé de respecter une des
règles jamais respecté et préconisé par Microsoft :

http://msdn2.microsoft.com/en-us/library/fb34ed9a-4eab-47cc-8eef-3068a4a1397e(vs.80).aspx

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr


Avatar
Gilles TOURREAU
Le Wed, 22 Aug 2007 17:53:00 +0200, David a écrit:

Comment est affecté le libellé de "label2" en provenance de SQL Server ?

Cordialement

Quel est le type d'exception ? Ou se passe l'exception exactement ?

"could not convert string to datatime: out-of-range value".
cela se passe lorsqu'on clique sur le bouton Update du detailsview alors
que
la date est p.ex. 17/08/2007. C'est clair que la date est interprêtée
comme
le 17è mois ... Mais pourquoi puisque sql server et asp.net l'interprête
correctment?

le code:
lb1 = CType(dvr.FindControl("label2"), Label).Text 'label2
contient la
date provenant de sql server
dats1 = DateTime.Parse(lb1)
...
ViewState("dats1") = dats1 'je la passe dans viewstate car il y a un
postback et donc la valeur est perdue

dats1 = ViewState("dats1") 'la conversion échoue ici






"Gilles TOURREAU" schreef in bericht
news:
Le Wed, 08 Aug 2007 23:07:01 +0200, Mark a écrit:

Bonjour,

la même application tourne sur deux pc indépendants:
le 1e est un Windows XP prof. sp2 IIS 5.1, version néeralandaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est
aussi:
13/08/2007.

le 2e est un Windows server 2003 sp2 IIS 6.0, version anglaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est
aussi:
13/08/2007.

Jusqu'ici pas de différence.

L'application utilise un detailsview qui permets l'Update des données.
La date dans le detailsview est rendue correctement (13-08-07 dû au
formattage, voyez le code) sur les deux ordinateurs.
Mais si je clique sur le bouton Updating et la date est p.ex. 14-08-07,
l'XP
effectue le changement sans problème, tandis que le server 2003 dit:
"could
not convert string to datatime: out-of-range value".



Quel est le type d'exception ? Ou se passe l'exception exactement ?


J'ai essayé avec String.Format("{0:yyyy.MM.dd}" dans le code-behind,
mais
sans succès.

Mes questions:
1) Pourquoi la conversion d'un string vers une date se passe bien avec
le XP
et provoque une erreur avec le server 2003? La seule différence entre
les
deux est la langue de la version (néerlandais et anglais), mais la
configuration regionale est la même (French (Belgium).
A croire qu'il y a plusieurs version de conversion, mais alors sur base
de
quoi?
2) comment résoudre le problème du server 2003?

Le code-behind:

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e
As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
DetailsView1.ItemUpdating
....
e.NewValues("datbeg") = String.Format("{0:yyyy.MM.dd}", datbeg)
....

the aspx file:
<asp:SqlDataSource ....
UpdateCommand="UPDATE [mytable] SET [datbeg] = @datbeg">
<UpdateParameters>
<asp:Parameter Name="datbeg" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>

<asp:DetailsView ....>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>' ></asp:TextBox>
</EditItemTemplate>
...

Un autre exemple:

sql = "select datbeg from mytable"
....
dtreader.Read()
datb = dtreader.GetDateTime(0).Date

=> avec XP: 13/07/2007
=> avec server 2003: 7/13/2007 !!!



Pouvez-vous indiquez comment vous avez affiché les dates dans ce test ?


Merci
Marc






Pour éviter ce genre de problème, il est conseillé de respecter une des
règles jamais respecté et préconisé par Microsoft :

http://msdn2.microsoft.com/en-us/library/fb34ed9a-4eab-47cc-8eef-3068a4a1397e(vs.80).aspx

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr









--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Jean BONBEUR
quel est le nom de la CultureInfo.CurrentCulture à ce moment ?
Avatar
David
<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:DropDownList ID="begdat" runat="server">
</asp:DropDownList><span style="color:Red; font-weight:bold">
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>


"Gilles TOURREAU" schreef in bericht
news:
Le Wed, 22 Aug 2007 17:53:00 +0200, David a écrit:

Comment est affecté le libellé de "label2" en provenance de SQL Server ?

Cordialement

Quel est le type d'exception ? Ou se passe l'exception exactement ?

"could not convert string to datatime: out-of-range value".
cela se passe lorsqu'on clique sur le bouton Update du detailsview alors
que
la date est p.ex. 17/08/2007. C'est clair que la date est interprêtée
comme
le 17è mois ... Mais pourquoi puisque sql server et asp.net l'interprête
correctment?

le code:
lb1 = CType(dvr.FindControl("label2"), Label).Text 'label2
contient la
date provenant de sql server
dats1 = DateTime.Parse(lb1)
...
ViewState("dats1") = dats1 'je la passe dans viewstate car il y a un
postback et donc la valeur est perdue

dats1 = ViewState("dats1") 'la conversion échoue ici






"Gilles TOURREAU" schreef in bericht
news:
Le Wed, 08 Aug 2007 23:07:01 +0200, Mark a écrit:

Bonjour,

la même application tourne sur deux pc indépendants:
le 1e est un Windows XP prof. sp2 IIS 5.1, version néeralandaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est
aussi:
13/08/2007.

le 2e est un Windows server 2003 sp2 IIS 6.0, version anglaise avec
configuration regionale: French (Belgium).
La notation courte est p. ex.. 13/08/2007.
La date (datetime) dans sql server installé sur cet ordinateur est
aussi:
13/08/2007.

Jusqu'ici pas de différence.

L'application utilise un detailsview qui permets l'Update des données.
La date dans le detailsview est rendue correctement (13-08-07 dû au
formattage, voyez le code) sur les deux ordinateurs.
Mais si je clique sur le bouton Updating et la date est p.ex. 14-08-07,
l'XP
effectue le changement sans problème, tandis que le server 2003 dit:
"could
not convert string to datatime: out-of-range value".



Quel est le type d'exception ? Ou se passe l'exception exactement ?


J'ai essayé avec String.Format("{0:yyyy.MM.dd}" dans le code-behind,
mais
sans succès.

Mes questions:
1) Pourquoi la conversion d'un string vers une date se passe bien avec
le XP
et provoque une erreur avec le server 2003? La seule différence entre
les
deux est la langue de la version (néerlandais et anglais), mais la
configuration regionale est la même (French (Belgium).
A croire qu'il y a plusieurs version de conversion, mais alors sur base
de
quoi?
2) comment résoudre le problème du server 2003?

Le code-behind:

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e
As
System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles
DetailsView1.ItemUpdating
....
e.NewValues("datbeg") = String.Format("{0:yyyy.MM.dd}", datbeg)
....

the aspx file:
<asp:SqlDataSource ....
UpdateCommand="UPDATE [mytable] SET [datbeg] = @datbeg">
<UpdateParameters>
<asp:Parameter Name="datbeg" Type="DateTime" />
</UpdateParameters>
</asp:SqlDataSource>

<asp:DetailsView ....>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="begin" SortExpression="datbeg">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("datbeg",
"{0:dd-MM-yy}") %>' ></asp:TextBox>
</EditItemTemplate>
...

Un autre exemple:

sql = "select datbeg from mytable"
....
dtreader.Read()
datb = dtreader.GetDateTime(0).Date

=> avec XP: 13/07/2007
=> avec server 2003: 7/13/2007 !!!



Pouvez-vous indiquez comment vous avez affiché les dates dans ce test ?


Merci
Marc






Pour éviter ce genre de problème, il est conseillé de respecter une des
règles jamais respecté et préconisé par Microsoft :

http://msdn2.microsoft.com/en-us/library/fb34ed9a-4eab-47cc-8eef-3068a4a1397e(vs.80).aspx

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr









--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr


Avatar
David
Il n'y en a pas, ni sur XP (mais pas d'erreur) ni sur server2003 version
anglaise (avec erreur).
Je sais qu'n faisant <globalization culture="fr-BE" uiCulture="fr-BE" />
dans le web.config, le problème est résolu, mais je voudrais savoir pourquoi
c'est indispensable, alors que la configuration est correcte.

J'ai une autre application sur le même server 2003 anglais qui écrit/lit
aussi des dates vers/depuis sql server sans problème. Mais ici, il n'y a pas
de textbox où l'utilisateur doit rentrer lui-même une date ( comme dans
l'Update du detailsview). Tout le problème est là: la conversion de la date
du textbox (donc en string) en date dérappe, ne suit pas la configuration
régionale ... Pourquoi?

Merci

"Jean BONBEUR" schreef in bericht
news:
quel est le nom de la CultureInfo.CurrentCulture à ce moment ?