Aiuto su valore nullo DB

sabato 07 giugno 2008 - 00.02

ertulio Profilo | Senior Member

Salve, ho un problema, tramite questo codice
Dim reader As OleDbDataReader = command.ExecuteReader() reader.Read() Label2.Text = reader.Item("Tot") reader.Close()
visualizzo il totale di un db. Il mio problema è che se il db è vuoto e apro la pagina che dovrebbe contenere il totale questa va in errore.
Come posso fare a modificare il codice di cui sopra in modo che se il db è vuoto la label mi visualizzi totale 0

Spero in un vostro aiuto grazie1000
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

alx_81 Profilo | Guru

>Salve,
Ciao!

>ho un problema, tramite questo codice
>visualizzo il totale di un db. Il mio problema è che se il db
>è vuoto e apro la pagina che dovrebbe contenere il totale questa
>va in errore.
>Come posso fare a modificare il codice di cui sopra in modo che
>se il db è vuoto la label mi visualizzi totale 0
puoi controllare la proprietà HasRows del DataReader:

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.hasrows.aspx

basta che controlli questa proprietà prima di eseguire l'assegnazione. Se è false, metti 0 nella textbox.
Alessandro Alpi | SQL Server MVP

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

motogpdesmo16 Profilo | Senior Member

E se controllassi direttamente lato server se il valore è null o meno inserendo la clausola ISNULL (se il db è su sqlserver) oppure NZ (Null to Zero) (se il db è Access)?

Ad esempio
Sql Server
Select Isnull(t1.totale,0) as Totale from T1

Access
Select NZ(t1.totale, 0) as Totale From T1

ertulio Profilo | Senior Member

Scusa ma avendo questo codice come modifico con NZ

"Select sum (Tot)AS Tot from Carrello where idUtente= '" + Session.SessionID + "'"
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

alx_81 Profilo | Guru

> E se controllassi direttamente lato server se il valore è null o meno inserendo la clausola ISNULL (se il db è su sqlserver) oppure NZ (Null to Zero) (se il db è Access)?
Attenzione.. con quello che dice etrulio ("se il db è vuoto", che credo volesse dire tabella vuota) la soluzione isnull o NZ non funziona, poichè non vi sono righe.
Quindi bisognerebbe prima capire se effettivamente gli torna il campo NULL oppure se il reader è vuoto.
Ovvero dov'è l'errore (in che riga, in debug te lo dice) e qual è..
Perchè la soluzione di motogpdesmo16, è corretta solo se il resultset ha almeno una riga, valorizzata a null, nel qual caso chiedo venia per questo intervento
Ciao!
Alessandro Alpi | SQL Server MVP

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

ertulio Profilo | Senior Member

Mi spiego meglio io allora

ho un db carrello della spesa. Quindi il carrello puo essere vuoto o pieno. Con questo codice

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

se il carrello è pieno il totale mi visualizza l'effettivo valore. Se però nel carrello non cè nessun articolo e quindi il db è completamente vuoto mi da questo errore in debug

Cast non valido dal tipo 'DBNull' al tipo 'String'.


Spero che ora si a tutto chiaro grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

alx_81 Profilo | Guru

>Mi spiego meglio io allora
>
>ho un db carrello della spesa. Quindi il carrello puo essere
>vuoto o pieno. Con questo codice
>se il carrello è pieno il totale mi visualizza l'effettivo valore.
Ok, con la sum, anche se non hai record, effettivamente uno lo torna, e NULL. Quindi quello che ti dice motogpdesmo16 è OK.

la query che devi fare è questa:

SELECT NZ(sum(Tot),0) as Tot FROM Carrello WHERE IDUtente=@Parametro;

ti ho indicato il parametro, perchè ti consiglio di non concatenare le stringhe sql, al fine di prevenire gli attacchi di tipo SQL Injection (http://en.wikipedia.org/wiki/SQL_injection)
Quindi utilizza le query parametriche, definendo una collection dei parameters per il comando.
--

Alessandro Alpi | SQL Server MVP

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

ertulio Profilo | Senior Member

HO provato ma l'errore che ora riscontro è

Funzione 'NZ' non definita nell'espressione

Con nz poi funzionerà con db completamente nullo? grazie
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

alx_81 Profilo | Guru

>HO provato ma l'errore che ora riscontro è
>Funzione 'NZ' non definita nell'espressione
Allora fai così:

SELECT IIF(IsNull(SUM(Tot)),0,SUM(Tot)) AS Tot FROM Carrello...
--

Alessandro Alpi | SQL Server MVP

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

ertulio Profilo | Senior Member

Grazie 1000 cosi funziona
http://www.risorsefantacalcio.it

Risorse per tutti gli appassionati di fantacalcio da cui prelevare news, probabili formazioni, voti del corriere e gazzetta e tanhto altro.

alx_81 Profilo | Guru

>Grazie 1000 cosi funziona
Di nulla, ma come ti ripeto, la soluzione proposta da motogpdesmo16 è corretta. Fossi in te accetterei anche la sua risposta!
--

Alessandro Alpi | SQL Server MVP

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

motogpdesmo16 Profilo | Senior Member

La funzione NZ è solo una reminiscenza scolastica quando si utilizzava Access. Non ricordavo il barbatrucco dell'IIF che ha giustamente postato Alx.

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