2009-09-22 10 views
8

He creado un conjunto de datos fuertemente tipado (MyDataSet) en mi aplicación .NET. En aras de la simplicidad, diremos que tiene una DataTable (MyDataTable), con una columna (MyCol). MyCol tiene su propiedad DataType establecida en "System.Int32" y su propiedad AllowDBNull establecida en "true".¿Cómo puedo incluir DBNull como un valor en mi conjunto de datos fuertemente tipado?

Me gustaría crear manualmente una nueva fila y agregarla a este conjunto de datos. Creo la fila sin ningún problema, con algo como:

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

Fine. Sin embargo, cuando intento para establecer el valor de DBNull:

myRow.MyCol = DBNull.Value; 

Me han dicho que no puedo hacerlo ... que no puede emitir ese a un int. Esto tiene sentido, de alguna manera, ya que lo he definido como un int ... pero ¿cómo puedo obtener DBNull allí? ¿Se supone que no puedo tener DBNull allí? ¿No es eso para lo que es la propiedad AllowDBNull?

Obviamente me falta algo fundamental. ¿Alguien puede ayudar a explicar lo que es?

EDIT: También intenté ingresar "int?" como DataType, pero Visual Studio arroja un error cuando lo ingreso, diciendo que "Column requiere un DataType válido".

+0

Esto puede ayudar: http://stackoverflow.com/questions/879095/nullable-int-column-in-dataset –

Respuesta

13

tiene en la clase MyDataTableRow un método generado llamado: SetMyColNull().

myRow.SetMyColNull(); 

también se puede hacer:

myRow["MyCol"] = DBNull.Value; 

porque myRow["MyCol"] es de tipo object

EDITAR (añadido por Cuestión OP):

También hay un método de contrapartida para volver a leer este valor, IsMyColNull().

+1

¡Egad! ¿Cómo extraño/no sé esto? ¡Excelente! ¡Muchas gracias! – Beska

0

int no acepta nulo, pero int? (la versión INullable) lo hace. Creo que necesitas ese tipo de datos en su lugar.

+1

Desafortunadamente, esto no funciona ...Intenté esto (debería mencionar esto en la pregunta ... lo editaré para hacerlo). Cuando hago esto, aparece una ventana que se queja de que "Column requiere un DataType válido". – Beska

1

Hay dos cosas.

Permitir DBNull es una configuración independiente de poder establecer el valor en DBNull.

Solo he usado la interfaz DataSet XSD para configurar esto ... pero no solo tuve que configurar "AllowDBNull = true", sino que también tuve que configurar "NullValue = (null)". Originalmente "NullValue" se estableció en "(Excepción)". Esto significaba que el conjunto de datos aceptaría bieng .Fill() ed con null, pero no le permitiría establecer manualmente el valor en nulo.

No estoy seguro si este es su problema, pero suena similar.

+0

Esto solo funciona con cadenas ... –

1

simplemente vaya al modo de diseñador en el conjunto de datos y haga clic con el botón secundario en el campo que desea que sea nulo habilitado, y seleccione propiedades, en la ventana de propiedades, establezca AllowDBNull en True y NullValue en (NULL); me funciona bien! mis mejores deseos!

+0

Esto solo funciona para cadenas ... –

Cuestiones relacionadas