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 
Altro errore di codice nel Self-Paced Training Kit per l'esame 70-529. Omai sono sicuro che si tratti di discriminazione... In questo post avevo segnalato gli errori in in due listati C#, mentre il corrispondente in VB .NET era corretto. E la stessa cosa accede a pagina 95; nel codice C# viene fatto questo controllo:
if (Session["UserID"] != null)
Tuttavia, nel corpo dell'if si aggiunge alla Session un oggetto con chiave UserID , invece si recuperarlo. Un'occhiata alla versione VB .NET chiarisce ogni dubbio: prima di aggiungere l'oggetto alla sessione, bisogna verificare che Session["UserID"] sia uguale a null, e non diverso 
Ma cosa vi ha fatto di male il C#, per trattarlo così? 
Su CodePlex, a questo indirizzo, è disponibile un wrapper realizzato in .NET che facilita l'utilizzo dei Windows Live Tools nelle proprie applicazioni Web. Attualmente sono supportate solo le Live Photos API. Tutti i dettagli dell'annuncio sono disponibili in questo post.
Hello Marco
Thanks for signing up for Microsoft Office Live Workspace beta!
Qualche minuto fa ho completato la registrazione al servizio Office Live Workspace... Adesso vado subito a provarlo 