Agregar restricciones existentes a DataSet
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 DataSet reflejan las del origen de datos. La información de restricciones de clave externa no están incluidas y deben crearse de forma explícita, como se muestra en Agregar restricciones a una tabla.
Al agregar la información del esquema a un DataSet antes de llenarlo con datos, se garantiza que se incluyen las restricciones de clave principal con los objetos DataTable en el DataSet. Como resultado, al realizar otras llamadas adicionales para llenar (Fill) el DataSet, la información de la columna de clave principal se puede usar para hacer coincidir las nuevas filas del origen de datos con las filas actuales de cada una de las tablas DataTable, con lo que 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 DataSet, con lo que se obtienen 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 el valor AddWithKey en la propiedad MissingSchemaAction crean una DataColumn con el valor true en la propiedad AutoIncrement. Sin embargo, en este caso debe definir manualmente los valores de AutoIncrementStep y AutoIncrementSeed. Para obtener más información acerca de las columnas de incremento automático vea Crear columnas AutoIncrement.
Al usar FillSchema o establecer el valor AddWithKey en MissingSchemaAction, se precisa un proceso 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 información sobre cómo definir de forma explícita la información de la clave principal de una tabla, vea Definir una clave principal para una tabla.
En el ejemplo de código siguiente se muestra cómo agregar la información del esquema a un DataSet mediante FillSchema.
Dim custDS As DataSet = New DataSet()
custDA.FillSchema(custDS, SchemaType.Source, "Customers")
custDA.Fill(custDS, "Customers")
[C#]
DataSet custDS = new DataSet();
custDA.FillSchema(custDS, SchemaType.Source, "Customers");
custDA.Fill(custDS, "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 custDS As DataSet = New DataSet()
custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
custDA.Fill(custDS, "Customers")
[C#]
DataSet custDS = new DataSet();
custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custDA.Fill(custDS, "Customers");
Múltiples 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 el nombre secuencial TableN, comenzando por "Table" que representa Table0. Si se pasa un nombre de tabla como argumento al método FillSchema, las tablas irán recibiendo de forma predeterminada el nombre secuencial NombreTablaN, comenzando con "NombreTabla" que corresponde a NombreTabla0.
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.
Vea también
Utilizar proveedores de datos de .NET Framework para obtener acceso a datos