2009-09-22 10 views
8

Ho creato un dataset fortemente tipizzato (MyDataSet) nella mia app .NET. Per semplicità, diremo che ha un DataTable (MyDataTable), con una colonna (MyCol). MyCol ha la proprietà DataType impostata su "System.Int32" e la proprietà AllowDBNull impostata su "true".Come posso includere DBNull come valore nel mio set di dati fortemente tipizzato?

Vorrei creare manualmente una nuova riga e aggiungerla a questo set di dati. Creo la riga senza problemi, con qualcosa del tipo:

MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow(); 

Fine. Tuttavia, quando si tenta di impostare il valore DBNull:

myRow.MyCol = DBNull.Value; 

mi hanno detto che non posso farlo ... che non può lanciare quella di un int. Questo ha senso, in un certo senso, dal momento che l'ho definito come int ... ma come posso ottenere DBNull? Non dovrei essere in grado di avere DBNull lì dentro? Non è quello per cui è la proprietà AllowDBNull?

Mi manca ovviamente qualcosa di fondamentale. Qualcuno può aiutare a spiegare di cosa si tratta?

MODIFICA: Ho anche provato a inserire "int?" come DataType, ma Visual Studio genera un errore quando lo inserisco, dicendo che "Column richiede un DataType valido."

+0

Questo può aiutare: http://stackoverflow.com/questions/879095/nullable-int-column-in-dataset –

risposta

13

si ha nella classe MyDataTableRow un metodo generato denominato: SetMyColNull().

myRow.SetMyColNull(); 

si può anche fare:

myRow["MyCol"] = DBNull.Value; 

perché myRow["MyCol"] è di tipo object

EDIT (aggiunto dalla Domanda OP):

V'è anche un metodo di controparte generato per leggere questo valore, IsMyColNull().

+1

Egad! Come mi sono perso/non lo so? Eccellente! Grazie molto! – Beska

0

int non accetta null, ma int? (la versione immancabile) fa. Penso che tu abbia bisogno di quel tipo di dati, invece.

+1

Sfortunatamente, questo non funziona ...Ho provato questo (dovrei menzionarlo nella domanda ... lo modifico per farlo.) Quando lo faccio, si apre una finestra che si lamenta che "La colonna richiede un DataType valido." – Beska

1

Ci sono due cose.

Consentire a DBNull è un'impostazione separata dall'essere in grado di impostare il valore su DBNull.

Ho usato solo l'interfaccia XSD DataSet per impostare questo ... ma non ho dovuto solo impostare "AllowDBNull = true", ma ho anche dovuto impostare "NullValue = (null)". Originariamente "NullValue" era impostato su "(Eccezione)". Ciò significava che il set di dati avrebbe accettato bieng .Fill() ed con null, ma non consentiva di impostare manualmente il valore su null.

Non sicuro se questo è il tuo problema, ma sembra simile.

+0

Funziona solo con le stringhe ... –

1

passare alla modalità di progettazione nel set di dati e fare clic con il pulsante destro del mouse sul campo che si desidera abilitare il null e selezionare proprietà, nella finestra delle proprietà, impostare AllowDBNull su True e NullValue su (NULL); funziona per me giusto! migliori saluti!

+0

Funziona solo con le stringhe ... –