Modificare valore campo dbnull di una datarow con altro valore.

giovedì 10 dicembre 2009 - 17.54

Ciunino Profilo | Newbie

Ciao a tutti. Spero possiate darmi una dritta perchè sto diventando pazzo dietro a questa (apparente, almeno per me) cretinata.
Ho un datatable tipizzato che pesca i dati da un database. Mettiamo per esempio che ci siano un campo int, uno string, e uno datetime.
Una volta recuperati i valori vado a leggere riga per riga la datatable che ho in mano.

for (int i = 0; i < mydt.Count; i++)
{
drow = mydt.Rows[i];
drow .CAMPOSTRING = "PIPPO";
}

Avrei bisogno di inserire nel campo string una certa frase, "pippo", ma se nel database in quel campo non c'è scritto nulla quando lo vado a leggere, nel mio datarow tale campo è giustamente DBNULL e non mi permette di scriverci dentro nulla. O meglio mi da il solito errore "Impossibile eseguire il cast di oggetti di tipo 'System.DBNull' sul tipo 'System.String'. "

Avete mica idea di come risolvere questo problema? Io ci ho provato tutto il giorno e poi mi sono arreso!

MagoDaniel1981 Profilo | Newbie

un buon sistema è usare COALESCE direttamente nella query che fai sul Db, la sintassi è

SELECT COALESCE(NomeCampo, 'PIPPO') as QuelloCheVuoi FROM Tabella

In questo modo, se NomeCampo è DbNull restituirà la stringa PIPPO, altrimenti il valore del campo.

Spero di esserti stato utile.

Ciao.
Daniel

alx_81 Profilo | Guru

>un buon sistema è usare COALESCE direttamente nella query
Nella maggior parte dei casi sono d'accordissimo con te, il problema è che il nostro Ciunino potrebbe non avere accesso al db.
In tal caso aggiungo con la possibilità dell'utilizzo del metodo IsNull del datarow:
http://msdn.microsoft.com/it-it/library/3fwatee0.aspx

Detto questo, per quanto possibile, agisci sulla query con quella funzione (correttamente indicata da MagoDaniel1981, coetaneo immagino ), quindi usa il mio suggerimento solo qualora tu non possa accedere al database.
Ed in generale, fai attenzione ad usare un datatable che è decisamente una soluzione pesante, che tende sempre di più ad essere tralasciata. Piuttosto pensa a creare le tue entità a mo' di classi/collezioni.

Ciao a tutti.
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

Ciunino Profilo | Newbie

Grazie a entrambi per la risposta, e scusate per il mio ritardo nella risposta.
Proverò a fare come mi avete suggerito.
Ciao e ancora grazie!
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