Ci sono state domande simili ma le risposte non erano quello che stavo cercando. Voglio inserire il valore di NULL nel database di SQL Server se il riferimento è NULL o un valore non è stato ancora assegnato. Al momento sto testando per nulla e sembra che.Net inserendo valori NULL nel database SQL Server da valori variabili
String testString = null;
if (testString == null)
{
command.Parameters.AddParameter(new SqlParameter("@column", DBNull.Value);
}
else
{
command.Parameters.AddParameter(new SqlParameter("@column", testString);
}
Questo guarda e si sente incredibilmente maldestro di me. Ho alcuni valori che sto inserendo in un database e per testarli tutti come sopra è molto prolisso. .Net non gestisce questo in qualche modo. Ho pensato che forse avrei usato una stringa piuttosto che una stringa, ma anche questo non sembra funzionare. Guardandomi intorno ho trovato articoli che parlano dell'uso dei tipi di Nullable.
System.Nullable<T> variable
Questo sembra funzionare per i primitivi, int ?, char? Doppio? e bool ?. In modo che potrebbe funzionare per quelli, ma per quanto riguarda le stringhe? Mi sto perdendo qualcosa qui. Quali tipi dovrei utilizzare per i valori primitivi e per i valori di stringa in modo che non debba verificare ripetutamente i valori prima di inserirli.
MODIFICA: Prima di ottenere troppe risposte sugli operatori ternari. Mi piacciono ma non in questo contesto. Non ha senso per me aver bisogno di testare quel valore e avere tutta quella logica in più, quando quel genere di cose avrebbe potuto essere implementato più in basso nel framework .Net e se avessi saputo quali tipi dare, lo otterrebbe gratuito.
Modifica: Ok, quindi ragazzi aiutatemi a formulare il mio piano di attacco. Userò il Nullable per i miei primitivi (int ?, double? Ecc.) E per le mie stringhe userò lo String ma il ?? test. Ciò mantiene le cose meno dettagliate. C'è qualcosa che mi manca qui, come forse perdere qualche semantica?
Il compilatore si strozzerà perché non può convertire implicitamente da stringa a DBNull. – LukeH
Sei corretto. Devi abbattere la stringa (x) in un oggetto. Esempio modificato –
Non è un fan di questo, perché rende facile a .Net indovinare il tipo sbagliato per un parametro. Sarebbe meglio specificare il tipo di parametro tramite un overload che richiede un enum 'SqlDbType'. –