Dataset e datarow estrarre valori senza parsing

mercoledì 25 ottobre 2006 - 17.16

bule Profilo | Junior Member

ciao a tutti ho questo problemino:

ho un dataset ,creato da un dataadapter, con due colonne i cui valori sono system.int16

estraggo le righe così

foreach( dataRow a in myDataset.Tables[0].Rows)

ora se prendo la prima colonna della riga

a[0]

io penserei che mi ritorni un int ma se faccio, per eesmpio, il controllo a[0]<7 ho un errore
perchè mi viene detto che non è possibile il cast tra un object e un int in modo diretto

allora ho provato così (int)a[0]<7 e questa volta mi viene detto che non è possibile fare questa conversione

devo fare così int.Parse(a[0].toString()) <7 ma questo mi pare uno spreco di risorse

perchè devo fare questi giri di parsing quando nella colonna 1 della riga del dataset ho già un int ????

paolopat Profilo | Junior Member

Il dataset non è tipizzato per cui tutti i valori dei campi sono object anche se a livello di database li hai definiti come interi. Comunque basta fare : Convert.ToInt16(a[0]) < 7 ....fammi sapere..ciao

bule Profilo | Junior Member

grazie per la risposta...

effettivamnte facendo il parsing come dici te funziona e probabilmente evito un'operazione visto che non converto in stringa prima ...

il mio dubbio però è che se faccio :

a[5].GetType()

ottengo system.int16 e quindi da qui dedurrei che quello che c'è dentro ad a nella colonna 5 è un int...

paolopat Profilo | Junior Member

si effettivamente hai ragione....non puoi fare un accesso tipizzato però i tipi di dati sono corretti....

paolopat Profilo | Junior Member

se la risposta risolve il tuo problema accettala per favore...grazie mille

bule Profilo | Junior Member

si ok scussa adesso la accetto ma dimmi non è possibile allora estrarare il dato senza fare il parsing?

paolopat Profilo | Junior Member

no...non è possibile....dovresti crearti un dataset tipizzato....

bule Profilo | Junior Member

e come si fà ? io lo creo da dataadapter...

paolopat Profilo | Junior Member

diciamo che la cosa un pochino più complicata....devi inserire un file .xsd nel progetto... e crearti un elemento per ogni tabella del database di cui hai bisogno....tutto questo se hai VS2003...ma con il VS2005 diventa tutto più facile....basta che trascini le tabelle di cui hai bisogno nel dal Server Explorer (nel quale devi creare una connessione al database di cui hai bisogno). Tutto ciò ti genera una classe che deriva da Dataset con le relative tabelle...per cui per accedere ad una tabella userai dataset.NomeTabella.....e per accedere ai campi.....tabella.nomeCampo che sarà già tipizzato....in questo momento non saprei indirizzarti su un buon articolo da seguire (anche perchè sono al lavoro)....però tienimi aggiornato..ciao

bule Profilo | Junior Member

finalmente sono giunto al problema...uso visual dtudio 2005 e pensavo che accedere al dataset tipizzato fosse immediato

invece al posto fare il ciclo foreach come facevo prima

foreach(datarow a in mio.dataset.tables[0].rows)

dovevo fare


foreach(ClasseDiMioDataset.MiaTabell1Row a in miodataset.MiaTabella1.rows)

e ora facendo a.NomeColonna ottengo il valore nel tipo di dato che avevo settato int16 appunto


penso che in questo modo, cioè utilizzare il dataset tipizzato, oltre che essere più elegante e comprensibile sia più rapido perchè comunque elimino dei parsing

grazie mille per la gentilezza

paolopat Profilo | Junior Member

in pratica già avevi risolto il problema...dovevi solo usare lo strumento correttamente....buon lavoro
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