224 messaggi dal 25 novembre 2001
devo inserire o aggiornare dei campi in sql server 2000 e 2005.

prelevo il dato da una casella di testo, lo passo ad un parametro e compongo la query.

Devo avere la possibilità di inserire dei valori null, ossia dei campi vuoti, in campo del db di tipo real.
Il campo è settato per accettare valori null.

ecco come ho impostato il parametro
SqlParameter p17 = new SqlParameter("@asce", SqlDbType.Real);
            p17.Direction = ParameterDirection.Input;
            p17.Value = txtasce.Text;
            cmd.Parameters.Add(p17);


purtroppo mi viene generata la seguente eccezione

System.FormatException: Formato della stringa di input non corretto


segnalando l'errore qui
cmd.ExecuteNonQuery();

Come posso inserire dei valori null in un campo numerico.?

Bye
Usul
Ciao,

scrivo il codice al volo ...
p17.Value = txtasce.Text.Equals(String.Empty) ? DbNull.Value : txtasce.text;

Fabrizio Canevali
224 messaggi dal 25 novembre 2001
grazie

la stringa modifcata è

p17.Value = txtasce.Text.Trim().Equals(String.Empty)? DBNull.Value : txtasce.Text;


ma il compilatore mi invia il seguente messaggio.

CS0173: Impossibile determinare il tipo di espressione condizionale perché non esiste conversione implicita tra 'System.DBNull' e 'string'

ho rimodificato la stringa

p17.Value = txtasce.Text.Trim().Equals(String.Empty)? DBNull.Value.ToString() : txtasce.Text;


ma ritrovo il solito messaggio

System.FormatException: Formato della stringa di input non corretto.

Bye
Usul
Risolvi molto semplicemente con un costrutto if...then...

if(string.IsNullOrEmpty(txtasce.Text))
p17.Value = DBNull.Value;
else
p17.Value = txtasce.Text;


SqlParameter.Value è di tipo object per cui accetta sia DBNull.Value che una stringa. Peraltro non puoi usare l'operatore ternario come ti è stato suggerito, mescolando i tipi. Ottieni un errore in compilazione.

Ciao, Ricky.

Ing. Riccardo Golia
Microsoft MVP ASP.NET/IIS
ASPItalia.com Content Manager
http://blogs.aspitalia.com/rickyvr
http://ricky.aspitalia.com
http://www.riccardogolia.it
Ciao,

in effetti ho preso un abbaglio. Posto il codice ricorretto.
SqlParameter p17 = new SqlParameter("@asce", SqlDbType.Real); 
p17.Direction = ParameterDirection.Input; 
if(!txtasce.Text.Equals(String.Empty))
p17.Value = txtasce.Text; 
cmd.Parameters.Add(p17); 

Fabrizio Canevali
224 messaggi dal 25 novembre 2001
ora funziona.
un grazie ad entrambi!

La soluzione di Ricky ha funzionato subito, quella di fabrica richiedeva anche un else, in quanto non specificava il parametro in assenza di un valore.
Modificato da usul il 26 luglio 2008 17.07 -

Bye
Usul
Ciao, tanto per curiosita prova anche così:
 p17.Value = String.IsNullOrEmpty(txtasce.Text) ? ((object)DBNull.Value) : ((object)txtasce.Text);

Fabrizio Canevali

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.