Problema conversione Datetime sulle INSERT e UPDATE

martedì 24 marzo 2009 - 20.03

Samb1985 Profilo | Junior Member

Non riesco ad effettuare gli INSERT e UPDATE su db sql server express 2005 in cui c'è un campo datetime.
Si tratta di un'applicazione scritta in c# ed utilizzo la classe SqlClient in particolare il seguente codice:

SqlConnection CN = new SqlConnection(conn);
String sql = "UPDATE Macchina SET Time = '"+DateTime.Now.ToString()+"' WHERE (ID = '"+myid+"')";
CN.Open();
SqlCommand CMD = new SqlCommand(sql, CN);
CMD.ExecuteNonQuery();

Viene lanciata la SqlClient Exception.
Ho anche provato a passare CONVERT(datetime,'"+DateTime.Now.ToString()+"',103) ma non funziona.

Eseguendo la stringa sul server come query viene visualizzato questo errore:
"Messaggio 242, livello 16, stato 3, riga 1
La conversione del tipo di dati da char a datetime ha generato un valore di tipo datetime non compreso nell'intervallo dei valori consentiti.
L'istruzione è stata interrotta."

alx_81 Profilo | Guru

Ciao,

>SqlConnection CN = new SqlConnection(conn);
>String sql = "UPDATE Macchina SET Time = '"+DateTime.Now.ToString()+"'
>WHERE (ID = '"+myid+"')";
>CN.Open();
>SqlCommand CMD = new SqlCommand(sql, CN);
>CMD.ExecuteNonQuery();
a parte il solito problema del SQL Injection in cui puoi incappare facilmente con una sintassi del genere (e a tal proposito leggi qui: http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx), il formato del datetime.now come stringa non è corretto per sql server. Usa le query parametriche e definisci un parametro smalldatetime o datetime dalla collection Parameters dell'oggetto SQLCommand, valorizzandolo con il semplice DateTime.Now. Non passare da stringa, ti basta usare il corretto datatype.


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Samb1985 Profilo | Junior Member

Grazie problema risolto velocemente con una semplice Query parametrica.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5