Parametri nulli

sabato 04 agosto 2007 - 19.59

_J_ Profilo | Senior Member

ragazzi buona sera!

ho creato una insert che inserisce dei dati presi da opportune txtbox e droplist mediante opportuni parametri.
a runtime però mi dice sempre

'formato stringa di input errato'

quando non seleziono nulla dalle droplist (notare che i campi del db relativi accettano i null...)

da premettere che le txbox sono 'correlate' alle droplist secondo questa 'meccanica':
in base al nome scelto nella drop ottengo il relativo valore in una textbox, e prendo il valore dalla textbox e lo uso nella insert.

le drop prendono i valori da database, e siccome volevo che in cima alla drop mi dicesse qualcosa del tipo 'scegli un nome', nel source aspx ho aggiunto un datalistitem di nome 'seleziona un nome' e di valore ="" (cioè vuoto...)

ebbene, quando non seleziono nulla dalle drop mi dà quel problema della stringa errata ,e penso sia collegato al value="" dell'item aggiunto...

ora non lo so se ci ho azzeccato, ma come potrei gestire i valori ""?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

nullatore Profilo | Junior Member

Se non viene selezionato nulla nella DROP immagino che non ci sia nulla scritto nel TXB.Giusto?
Quindi è il problema è nell' INSERT quando la TXB è vuota. Ho capito bene?
~nullatore~
mai dire corto circuito virtuale

_J_ Profilo | Senior Member

sì, esatto, il problema è proprio quello...e se l'intuizione mi funziona dovrei associare il vuoto delle textbox al null.... il problema è che non so come farlo visto che con i null non ho avuto molto spesso a che fare..
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

nullatore Profilo | Junior Member

puoi per esempio scrivere (sto scrivendo al volo,,,speriamo non ci siano errori)

cmd.Parameters.Add("@par1", SqlDbType.VarChar,30);
cmd.Parameters["@par1"].Value = (string.IsNullOrEmpty(TuaTextBox.Text))?(DBNull.Value):(TuaTextBox.Text)

N.B. cmd è un SqlCommand.

Oppure se stai usando una storeprocedure puoi scrivere (dentro la SP) il parametro in questione con valore di default uguale a NULL, cosi poter scrivere nel tuo codice

if (!string.IsNullOrEmpty(TuaTextBox.Text))
{
cmd.Parameters.Add("@par1", SqlDbType.VarChar,30);
cmd.Parameters["@par1"].Value = TuaTextBox.Text;
}
~nullatore~
mai dire corto circuito virtuale

_J_ Profilo | Senior Member

e se provassi a settare i null come default direttamente nelle tabelle del database???
che ne dici?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

nullatore Profilo | Junior Member

>e se provassi a settare i null come default direttamente nelle
>tabelle del database???
>che ne dici?

Non serve mettere ad una colonna il "NULL" come default.
Se la tua insert non impone un valore per quella colonna automaticamente viene scritto NULL.
~nullatore~
mai dire corto circuito virtuale

ghio Profilo | Newbie

prova:
cmd.Parameters.Add("@par1", SqlDbType.VarChar,30);

if (!string.IsNullOrEmpty(TuaTextBox.Text))
{
cmd.Parameters["@par1"].Value = TuaTextBox.Text;
}
else
{
cmd.Parameters["@par1"].Value =DBNull.Value;
}
la guida di vusual studio riporta a proposito della classe DBNull:

Questa classe viene usata per indicare l'assenza di un valore noto, generalmente in un'applicazione di database.
Ciao, M

_J_ Profilo | Senior Member

sì, ho modificato il codice di nullatore ed ho fatto proprio come dici tu, e funziona alla perfezione, senza impostare null o altro..
era con il dbnull.value che non andavo d'accordo, ma alla fine ci siamo capiti

grazie ad entrambi!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
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