Agregar restricciones existentes a un conjunto de datos

El método Fill de DataAdapter llena un DataSet sólo con las columnas y filas de un origen de datos. Aunque las restricciones se suelen establecer en el origen de datos, el método Fill no agrega de forma predeterminada esta información del esquema al DataSet. Para llenar un DataSet con la información de restricciones de clave principal existentes en el origen de datos, puede llamar al método FillSchema de DataAdapter o establecer la propiedad MissingSchemaAction de DataAdapter con el valor AddWithKey antes de llamar a Fill. De esta forma se garantiza que las restricciones de clave principal del objeto DataSet reflejen las del origen de datos. La información de restricciones de clave externa no se incluye y se debe crear explícitamente, como se muestra en DataTable Constraints.

Al agregar la información del esquema a un objeto DataSet antes de rellenarlo con datos, se garantiza que se incluyan las restricciones de clave principal con los objetos DataTable de DataSet. Como resultado, al realizar llamadas adicionales para rellenar el objeto DataSet, la información de la columna de clave principal se usa para hacer coincidir las nuevas filas del origen de datos con las filas actuales de cada instancia de DataTable, y los datos actuales de las tablas se sobrescriben con los del origen de datos. Sin la información del esquema, las filas nuevas del origen de datos se agregan al objeto DataSet, lo que genera filas duplicadas.

Nota

Si una columna del origen de datos es de incremento automático, el método FillSchema o el método Fill con un MissingSchemaAction de la propiedad AddWithKey, crea una DataColumn con el valor de la propiedad AutoIncrement establecido como true. Pero en este caso tendrá que definir manualmente los valores AutoIncrementStep y AutoIncrementSeed. Para obtener más información sobre las columnas de incremento automático, consulta Crear Columnas AutoIncrement.

Al usar FillSchema o establecer MissingSchemaAction en AddWithKey, se necesita procesamiento adicional en el origen de datos para determinar la información de la columna de clave principal. Este proceso adicional puede reducir el rendimiento. Si conoce en la fase de diseño la información de la clave principal, es aconsejable especificar de modo explícito la columna o columnas que la forman para mejorar el rendimiento. Para obtener más información sobre la especificación de modo explícito de información de la clave principal de una tabla, consulta Definir Claves Principales.

En el ejemplo de código siguiente se muestra cómo agregar la información del esquema a un DataSet mediante FillSchema:

Dim custDataSet As New DataSet()  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");  
custAdapter.Fill(custDataSet, "Customers");  

En el ejemplo de código siguiente se muestra la forma de agregar la información del esquema a un DataSet mediante la propiedad MissingSchemaAction.AddWithKey del método Fill:

Dim custDataSet As New DataSet()  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey  
custAdapter.Fill(custDataSet, "Customers")  
var custDataSet = new DataSet();  
  
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;  
custAdapter.Fill(custDataSet, "Customers");  

Control de varios conjuntos de resultados

Cuando DataAdapter encuentra varios conjuntos de resultados devueltos por SelectCommand, crea varias tablas en el DataSet. Las tablas reciben de forma predeterminada un nombre incremental de base cero TableN, comenzando por Table en lugar de “Table0”. Si se pasa un nombre de tabla como argumento al método FillSchema, las tablas reciben el nombre secuencial que comienza por cero TableNameN, comenzando por TableName en lugar de «TableName0».

Nota

Si se llama al método FillSchema del objeto OleDbDataAdapter para un comando que devuelve múltiples conjuntos de resultados, sólo se devuelve la información del esquema del primer conjunto de resultados. Al devolver la información del esquema de múltiples conjuntos de resultados mediante OleDbDataAdapter, es aconsejable asignar a la propiedad MissingSchemaAction el valor AddWithKey y obtener la información del esquema al llamar al método Fill.

Consulte también