Gestione di un campo smalldatetime nullo

mercoledì 02 maggio 2007 - 13.44

trinity Profilo | Guru

Ho la seguente tabella di un db sql server:

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


nella quale vi è un campo chiamato datablocco che in partenza è nullo e quando è nullo ed eseguo la stored di seguito riportata:

ALTER PROCEDURE [dbo].[GetAlb] ( @CodAlb Int, @codcomune Int ) AS BEGIN SELECT codalb, descrizione, indirizzo, cap, citta, codcomune, provincia, codprov, codreg, categoria, piva, tel, fax, email, versprogramma, nrletti, nrletticonf, dataattivazione, datascadenza,CASE WHEN datablocco IS NULL THEN '' ELSE datablocco END, pass FROM dbo.albergo WHERE codalb=@CodAlb AND codcomune=@codcomune END

mi prende come dato 1/1/1900 mentre se c'è la data nel campo funziona tutto correttamente.
Io vorrei che quando il campo datablocco è nullo non mi deve riportare una data tipo 1/1/1900 ma bensì un valore nullo da poterlo gestire con il seguente codice per esempio:

If SqlDr.GetSqlDateTime(1).IsNull = False Then Me.Textbox1.Text = SqlDr.GetSqlDateTime(1).Value Elsel Msgbox("Data non presente") End If

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>CASE WHEN datablocco IS NULL THEN '' ELSE datablocco
>mi prende come dato 1/1/1900 mentre se c'è la data nel campo
>funziona tutto correttamente.
>Io vorrei che quando il campo datablocco è nullo non mi deve
>riportare una data tipo 1/1/1900 ma bensì un valore nullo da
>poterlo gestire con il seguente codice per esempio:
>
>If SqlDr.GetSqlDateTime(1).IsNull = False Then
> Me.Textbox1.Text = SqlDr.GetSqlDateTime(1).Value
>Elsel
>Msgbox("Data non presente")
>End If
Nel campo datablocco, che è di tipo smalldatetime, puoi mettere solamente un NULL o una data valida..
quindi o gestisci le date valorizzate a NULL nel codice oppure imposti come valore "non considerabile" il minimo valore per il tipo di dato, che nel tuo caso è 1/1/1753 (se non ti serve come valore effettivo).
Il tuo codice VB, controlla se il campo data richiesto è null e se non lo è ricava il dato del campo. Quindi perchè nella stored procedure usi la CASE? Occhio, perchè le il valore blank ('') viene preso da sql come 1/1/1900.. non serve la case. Se la tiri via, il tuo codice controlla già il valore NULL di datablocco.
In alternativa usa pure la case nella stored procedure, però impostando nel THEN il minimo valore e controllando nel codice quest'ultimo valore al posto del controllo sul NULL, decidi tu..

>
>Ciao
Ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

trinity Profilo | Guru

ok ma se io tolgo il case ed impostavo una semplice select quando andavo a fare:

If SqlDr.GetSqlDateTime(1).IsNull = False Then
Me.Textbox1.Text = SqlDr.GetSqlDateTime(1).Value
Elsel
Msgbox("Data non presente")
End If

il campo del db era null ma mi riportava cmq il valore 12:00:00 del time quindi per il codice non era null allora tolgo la if ma così mi dice che il campo è null ecco perchè allora avevo adottato l'idea del case nella stored

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>ok ma se io tolgo il case ed impostavo una semplice select quando
>andavo a fare:
>
>If SqlDr.GetSqlDateTime(1).IsNull = False Then
> Me.Textbox1.Text = SqlDr.GetSqlDateTime(1).Value
>Elsel
>Msgbox("Data non presente")
>End If
>
>il campo del db era null ma mi riportava cmq il valore 12:00:00
>del time quindi per il codice non era null allora tolgo la if
>ma così mi dice che il campo è null ecco perchè allora avevo
>adottato l'idea del case nella stored
un momento..
IsNull ti torna true o false..
se è true, vedi il messagebox..
se è false mette il valore non nullo..
non capisco come può darti 12:00 se è null.. se è null nemmeno entra nella riga in cui fai l'assegnazione..
forse non ho capito bene la problematica.. ma quell'if dovrebbe comportarsi com'è scritto
comunque scarica l'allegato.. e cambia la connection string, la stored procedure da chiamare e l'id del campo..

---------------------------------------
Aggiornamento..

una cosa, ma sei sicuro che l'indice corrispondente al campo nella GetSQLDateTime sia corretto??? perchè nella stored procedure è in un altro posto.. 19esima posizione.. ci ho fatto caso solo ora..
>
>Cirillo Fabio
>www.wondernet.biz
>fabio@wondernet.biz
>http://blogs.dotnethell.it/fabiocirillo/
>http://wnetsoftware.blogspot.com

Alx81 =)

http://blogs.dotnethell.it/suxstellino
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5