Conversione datatime

martedì 17 luglio 2007 - 16.03

lucalillo Profilo | Newbie

Ciao a tutti.
sono nuovo quindi chiedo scusa per le banalità che probabilmente richiedo....

Devo inserire una stringa contenente una data ed ora, caricata con la funzione Now di vb.net in una tabella SQL server 2000 su un campo definito di tipo datetime

ecco l'errore restituitomi:

La conversione del tipo di dati da char a datetime ha generato un valore di tipo datetime non compreso nell'intervallo di valori validi.
L'istruzione è stata interrotta.



per informazione inserisco il codice scritto:
fermoinizio.Text=now()
fermoinizio.Text=now()



sql2 = "INSERT into fermi ( doinizio,dofine,durata) Values('"
sql2 = sql2 & (fermoinizio.Text) & "','"
sql2 = sql2 & (fermoinizio.Text) & "', "
sql2 = sql2 & xferm
sql2 = sql2 & " )"
'---

esecommand(sql2)

grazie per i suggerimenti.

Fantazma Profilo | Junior Member

Ciao
l'errore consiste nel passaggio di valori DateTime non gestibili dal motore SQL.
Ti consiglio di utilizzare dei parametri per passare i valori DateTime in questo modo:

Dim mysql As String Dim mycommand As SqlCommand Dim myparametro As SqlParameter Dim myConnection As SqlConnection myConnection = New SqlConnection("Tua stringa di connessione") Try mysql = "Insert INTO TData Values (@Data)" mycommand = New SqlCommand(mysql, myConnection) mycommand.Parameters.Add(New SqlParameter("@Data", SqlDbType.DateTime)) mycommand.Parameters("@Data").Value = Now mycommand.Connection.Open() mycommand.ExecuteNonQuery() mycommand.Connection.Close() Catch ex As Exception MessageBox.Show(ex.ToString) End Try

Ovviamente rivedi i nomi del DB, delle tabelle etc... in funzione del tuo DB.
In questo modo non avrai problemi di alcun tipo con l'inserimento delle date anche se passassi ad un formato diverso di data (formato US, ITA etc...).

Ciao!!!

amelix Profilo | Expert

Molto probabilmete il problema è la formattazione della data...
Devi formattarla yyyy-mm-dd hh:mm:ss funziona in tutti i formati...

Purtroppo non conosco vb.net e immagino che la conversione dtatetime/string la faccia lui implicitamente...


Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

lbenaglia Profilo | Guru

>Devi formattarla yyyy-mm-dd hh:mm:ss funziona in tutti i formati...
...solo nel caso in cui il formato data associato alla login con la quale ti sei connesso all'istanza utilizza il trattino come separatore; in tutti gli altri casi otterrai l'errore segnalato da lucalillo.
Per svilcolarti completamente dal formato della data/ora devi utilizzare il formato Ansi SQL YYYYMMDD hh:mm:ss.ms

Per una trattazione completa, fai riferimento a questo articolo di Tibor:

"The ultimate guide to the datetime datatypes"
http://www.karaszi.com/SQLServer/info_datetime.asp


>Purtroppo non conosco vb.net e immagino che la conversione dtatetime/string
>la faccia lui implicitamente...
...solo se utilizzi il codice suggerito da Fantazma.
Per ottimizzare ulteriormente il tutto, occorrerebbe definire una stored procedure parametrica che accetti in input i valori che si intendono inserire in tabella.
In questo modo la stored procedure verrebbe compilata alla prima esecuzione, riutilizzando il medesimo piano di esecuzione per tutte le chiamate successive.
La stored procedure verrà richiamata lato client utilizzando il codice suggerito da Fantazma.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lucalillo Profilo | Newbie

Grazie, funziona!
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