2008-10-05 20 views
11

Parece que siempre utilizo Get cuando trabajo con datos (fuertemente tipados o no) de la base de datos y nunca he necesitado usar Fill aunque también podría usar Fill en lugar de get al extraer y actualizar datos.Adaptadores de tabla .NET: ¿Obtener contra llenar?

¿Alguien puede proporcionar orientación sobre las implicaciones y errores de cada método?

¿En qué situaciones es preferible usar uno u otro?

¿Tiene alguna implicancia en el rendimiento?

Gracias de antemano por las respuestas! ¡Amo esta comunidad!

Respuesta

3

Un detalle particular de Fill, si la tabla ya contiene datos es que puede obtener excepciones de índice únicas cuando, por ejemplo, la consulta devuelve una fila cuya clave primaria ya está en la tabla.

He trabajado con un montón de código de formularios de Windows vinculados a datos donde los controles de edición o una cuadrícula en el formulario están vinculados a una tabla y luego se utiliza Fill para cargar más filas de la base de datos a la tabla. Esto puede causar algunas secuencias de activación de eventos interesantes y errores intermitentes de la experiencia.

Usando Get para recuperar una nueva tabla con los nuevos resultados, entonces volver a vincular el formulario a la nueva tabla puede evitar situaciones como esta.

Dudo que haya mucha diferencia de rendimiento entre los dos, a menos que se use Fill en una tabla con filas existentes. En este caso, se ignora el método BeginLoadData de la tabla, que normalmente tendría un retraso en la activación del evento y la reconstrucción del índice hasta el final.

1

La única diferencia es que GetData crea una instancia para usted, Fill llenará una tabla existente.

Depende si quiere o necesita crear una instancia del DataTable. A menudo utilizo Fill al completar un determinado miembro de la tabla de un DataSet que ya he creado.

3
  • Obtenga cuando solo desee una única DataTable.
  • Rellene cuando desee agregar tablas de datos adicionales en un solo conjunto de datos.
4

Usar Fill puede ser ideal para depurar excepciones porque la DataTable pasada al método puede ser interrogada para más detalles. Get no regresa en la misma situación.

Consejos:

  • DataTable.GetErrors() devuelve una matriz de instancias DataRow que están en error
  • DataRow.RowError contiene una descripción del error fila
  • DataRow.GetColumnsInError() devuelve una matriz de instancias de DataColumn en error
Cuestiones relacionadas