Interpretare valori DBNull

mercoledì 12 novembre 2008 - 16.45

liveforever81 Profilo | Junior Member

Salve a tutti!

Ho questo problema: nella lettura di un DB mi tiro fuori una riga, chiamiamola DataRow dr;

Questa riga ha molteplici colonne dai tipi più disparati (generalmente String, DateTime e int).

Ciclo i valori di questa riga in modo da trasportarmeli altrove sulla base del tipo di tale campo: il problema sorge perchè quando trova DBNull mi si schianta e nn riesce a gestirlo.

Avevo provato a fare una cosa del genere:

for (int i = 0; i < method.ReturnProperties.Count; i++)
{
String type = serviceObject.Properties[method.ReturnProperties[i]].Type;
if (drNGR[i] is DBNull)
{
switch (type)
case ("String"):
serviceObject.Properties[method.ReturnProperties[i]].Value = String.Empty;
break;
case ("DateTime"):
serviceObject.Properties[method.ReturnProperties[i]].Value = DateTime.MinValue;
break;
case ("int"):
serviceObject.Properties[method.ReturnProperties[i]].Value = -1;
break;
default: break;
}
}
else
{
serviceObject.Properties[method.ReturnProperties[i]].Value = drNGR[i];
}
}

Esso però mi schianta:

String was not recognized as a valid DateTime.

Potete aiutarmi?
Grazie

llamanna Profilo | Junior Member

Se non ho capito male, in base al tipo devi trasferire i dati letti nella riga, su oggetti differenti.
Perchè non provi ad usare la seguente sintassi:

if(dr[i] is string)
{
//assegno dr[i] ad una certa variabile stringa
}
else if (dr[i] is DateTime)
{
//assegno dr[i] ad una certa variabile datetime
}

in questo modo eviti il problema sul DBNull

Laura.
http://lauralamanna.blogspot.com/

liveforever81 Profilo | Junior Member

Il mio obiettivo è di capire, tra i valori null restituiti dalla riga, il tipo di tali valori null...capisci?

if(dr[i] is String)
o is DateTime non mi permette di capire se quel tipo è null o no, ma mi costringe ad annidare un altro statement all'interno...

llamanna Profilo | Junior Member

Forse stavolta ho capito: devi prendere una contromisura quando il datarow ti restituisce il valore DBnull. Se il datarow appartiene ad un dataTable potresti adottare la seguente soluzione:

if(dr[i] == DBNull.Value)
{
//Valuti il tipo restituito da:
Type tipoValoreNullo = dr.Table.Columns[i].DataType
//e prendi le relative contromisure
}
Laura.
http://lauralamanna.blogspot.com/
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