Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Inserire un valore null in un campo datetime di SQL Server

L'applicazione che sto sviluppando recupera una serie di informazioni da una base di dati, comprese alcune date. Poiché i campi datetime nel database ammettono il valore null, per manipolare le date utilizzo il tipo Nullable<DateTime>, grazie al quale riesco facilmente a capire se nessuna data è stata specificata nella base di dati. Questo sistema ha però un problema. Supponiamo di dover aggiornare un campo datetime, inserendo al suo interno il valore null. Se io creo un oggetto SqlParameter di tipo SqlDbType.DateTime (con il parametro chiamato @dataScandenza) e imposto la sua proprietà Value su null, andando ad eseguire il metodo SqlCommand.ExecuteNonQuery si ottiene il seguente messaggio di errore:

The parameterized query '...' expects the parameter '@dataScadenza', which was not supplied.

Eppure il parametro è stato correttamente aggiunto all'oggetto SqlCommand. In questo caso il messaggio di errore è fuorviante: in realtà il parametro è stato specificato, ma il suo valore non è valido.

Per risolvere il problema, nel caso in cui si voglia inserire un valore null in un campo datetime di SQL Server, si deve ricorrere al valore SqlDateTime.Null. Per semplificare il tutto, ho definito una routine che prende in ingresso il nome del parametro, un oggetto di tipo Nullable<DateTime> e restituisce un SqlParameter impostato nel modo corretto:

 

private SqlParameter CreateDateTimeParameter(string parameterName, DateTime? date) { SqlParameter parameter = new SqlParameter(parameterName, SqlDbType.DateTime); if (date.HasValue) parameter.Value = date.Value; else parameter.Value = SqlDateTime.Null; return parameter; }

E il gioco è fatto Smile

Technorati Tag: ,,,,

Print | posted on sabato 15 dicembre 2007 14:31 | Filed Under [ C# ADO .NET & SQL SQL Server ]

Feedback

Gravatar

# re: Inserire un valore null in un campo datetime di SQL Server

Normalmente io uso System.DbNull.Vaue per settare a NULL un valore di un parametro DbNull è una classe statica, mentre SqlDateTime è una struttura, con tutto quello che ne consegue in termini di performances.
15/12/2007 17:39 | Alesssandro Scardova
Gravatar

# re: Inserire un valore null in un campo datetime di SQL Server

Grazie per il suggerimento, proverò a sostiuire SqlDateTime.Null con DbNull.Value, vediamo cosa succede :-)
15/12/2007 17:48 | Marco Minerva
Gravatar

# re: Inserire un valore null in un campo datetime di SQL Server

Interessante, ma secondo me un trucchetto del genere non facilita molto la leggibilità del codice :-)
19/12/2007 11:27 | Marco Minerva
Gravatar

# re: Inserire un valore null in un campo datetime di SQL Server

Può essere, ma se ti capita di doverlo fare per 50 volte di fila al secondo if un pensierino ce lo fai :) Poi adesso c'è google ;)
19/12/2007 22:45 | Alessandro Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET