String.format e SQLClient.......risultato diverso tra seven e Vista

venerdì 11 marzo 2011 - 17.48

dompa72 Profilo | Senior Member

Ho un problema molto banale ma che mi fa impazzire.
Si tratta di comportamenti diversi del string.format se utilizzato con il S.O. 7 (Seven) invece di Vista/XP.
La stringa strDataReg = "convert (DateTime, '" + String.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now) + "', 120)";

su seven mi ritorna il separatore dell'orario con ":", su Vista e XP ".".
Per Correggere il bug sono costretto ad inserire questo replace "strDataReg = strDataReg.Replace(".", ":");"

Altra cosa anomala è che se inserisco in una query direttamente un DataTime da inviare a SQL Server su seven non ritorna errori su Vista/Xp (giustamente) mi da l'errore

Sto sviluppando con C# di VS2008

Spero che qualcuno riesce a risolvere questo enigma

Grazie a tutti

jackk87 Profilo | Junior Member

>Ho un problema molto banale ma che mi fa impazzire.
>Si tratta di comportamenti diversi del string.format se utilizzato
>con il S.O. 7 (Seven) invece di Vista/XP.
>La stringa strDataReg = "convert (DateTime, '" + String.Format("{0:yyyy-MM-dd
>HH:mm:ss}", DateTime.Now) + "', 120)";
>
>su seven mi ritorna il separatore dell'orario con ":", su Vista
>e XP ".".
>Per Correggere il bug sono costretto ad inserire questo replace
>"strDataReg = strDataReg.Replace(".", ":");"
>
>Altra cosa anomala è che se inserisco in una query direttamente
>un DataTime da inviare a SQL Server su seven non ritorna errori
>su Vista/Xp (giustamente) mi da l'errore
>
>Sto sviluppando con C# di VS2008
>
>Spero che qualcuno riesce a risolvere questo enigma

Ciao Dompa andando in pannello di controllo -> Opzioni internazionali e della lingua, sicuramente avrai il separatore dell'ora su xp/vista = "." e su seven =":" questo perchè è stato impostato come predefinito e quindi il sistema va a leggere li.
In precedenza ho avuto problemi riguardo il separatore delle migliaia e ho risolto con il namespace System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator e ho dato un'occhiata al namespace e ci sono delle funzioni interessanti cioè:
System.Globalization.DateTimeFormatInfo.CurrentInfo.TimeSeparator.ToString 'che restituisce il separatore dell'ora impostato nel sistema
System.Globalization.DateTimeFormatInfo.InvariantInfo.TimeSeparator.ToString 'che restituisce il separatore dell'ora come predefinito su ":"

puoi utilizzare questo namespace e adattarlo per il tuo problema

per quanto riguarda la funzione DataTime utilizza sempre il separatore impostato nel sistema

>
>Grazie a tutti

spero di esserti stato d'aiuto

ciao

dompa72 Profilo | Senior Member

String.Format("{0:yyyy-MM-dd HH:mm:ss}", Data)
in teoria la stringa di formattazione deve (sempre in teoria) seguire il formato imposto dallo sviluppatore.
Questo non succede in seven.
Ho controllato le impostazioni internazionali e sono identiche a quell di Vista.
Inoltre nei miei sorgenti setto il namespace System.Globalization, questo perchè nella mia azienda ho PC installati da Americani, Inglesi ed Italiani (fornitori di impianti).

Grazie per la risposta, ma il dilemma continua
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5