C# Conversione di data per scrittura in db

di il
3 risposte

C# Conversione di data per scrittura in db

Salve,
definisco il campo data :

DateTime Oggi = DateTime.Now;

e qui passo il valore alla query:

cmd.Parameters.Add("@Data", SqlDbType.VarChar, 100).Value = Oggi;

Mi da un errore sulla conversione.
System.Data.SqlClient.SqlException: 'Errore durante la conversione del tipo di dati da varchar a bigint.'

Come risolvo?

3 Risposte

  • Re: C# Conversione di data per scrittura in db

    Ma perché il campo è un varchar se ci deve stare una data?

    Se vuoi una stringa (ma è una cosa sbagliata), devi passare una stringa

    cmd.Parameters.Add("@Data", SqlDbType.VarChar, 100).Value = Oggi.ToString();

    In realtà dovrebbe essere

    cmd.Parameters.Add("@Data", SqlDbType.DateTime).Value = Oggi;

    anche per il futuro delle tue query su quel campo ...
  • Re: C# Conversione di data per scrittura in db

    Salve Koko,
    mi aggiungo a quanto correttamente indicato da @Oregon, che ha specificato che andrebbe utilizzato il tipo di dato corretto e non la sua rappresentazione testuale, che tu tra l'altro hai involontariamente mal proposto al caricamento del parameter...

    al di la' di cio', utilizzando una "stringa", conviene tener presente le impostazioni di locale specificate per il principal (la login) utilizzata, perche' queste vengono utilizzate da SQL Server per l'interpretazione del valore testuale delle date... in questo caso, una login che abbia come impostazione di linguaggio la lingua italiana, la data in formato "dd/MM/yyyy" viene correttamente interpretata, mentre una login che abbia la locale ad esempio "MM/dd/yyyy" ovviamente la interpreterebbe in maniera errata. Quindi va ben tenuta in considerazione questa eventualita', che in ambiente di servizio largamente ben geolocalizzato puo' comportare sia errori fisici (eccezioni di conversione) che logici ( "05/01/2020" puo' infatti essere il 5 gennaio come puo' per altre locales essere il 1 maggio)...
    E' quindi ampiamente consigliato di NON usare mai localizzazioni di formato ma di utilizzare sempre un formato standard riconoscibile da "tutti" a prescindere dalla locale impostata, quindi lo standard ISO "YYYY-MM-DD" oppure il suo omonimo senza separatori "YYYYMMDD"...
    salutoni
    --
    Andrea
  • Re: C# Conversione di data per scrittura in db

    Ma poi perché tutto questo nella sezione "Altri linguaggi" e non in C# ?
Devi accedere o registrarti per scrivere nel forum
3 risposte