Profesor: Pablo Ulman (Polshu) DataSet DataSet (System.Data): El DataSet de ADO.NET es una representación de datos residente en memoria que proporciona un modelo de programación relacional coherente independientemente del origen de datos que contiene. Un DataSet representa un conjunto completo de datos, incluyendo las tablas que contienen, ordenan y restringen los datos, así como las relaciones entre las tablas. Hay varias maneras de trabajar con un DataSet, que se pueden aplicar de forma independiente o conjuntamente. Crear mediante programación una DataTable, DataRelation y una Constraint (restricción) en un DataSet y rellenar las tablas con datos. Llenar el DataSet con tablas de datos de un origen de datos relacional existente mediante DataAdapter. Cargar y hacer persistente (guardar) el contenido de DataSet mediante XML. También se puede transportar un DataSet con establecimiento inflexible de tipos mediante un servicio Web XML (WebService). El diseño del DataSet lo convierte en idóneo para el transporte de datos mediante servicios Web XML. V1.0 Profesor: Pablo Ulman (Polshu) DataSet Algunos métodos del DataSet: Clear: Borra cualquier dato de DataSet mediante el procedimiento de quitar todas las filas de todas las tablas. Clone: Copia la estructura de DataSet, incluidos todos los esquemas, relaciones y restricciones de DataTable. No copia ningún dato. Copy: Copia la estructura y los datos para este objeto DataSet. HasChanges Obtiene un valor que indica si DataSet presenta cambios, incluyendo filas nuevas, eliminadas o modificadas. Merge Combina un objeto DataSet especificado y su esquema en el objeto DataSet actual. WriteXml(string filename, XmlWriteMode mode) Escribe los datos actuales y, de forma opcional, el esquema para el objeto DataSet en el archivo indicado mediante la enumeración XmlWriteMode especificada. Para escribir el esquema, establezca el valor del parámetro mode en WriteSchema. WriteSchema: Escribe el contenido actual de DataSet como datos XML con la estructura relacional como un esquema XSD en línea. Si el DataSet sólo tiene un esquema sin datos, únicamente se escribe el esquema en línea. Si el DataSet no tiene un esquema actual, no se escribe nada. IgnoreSchema: Escribe el contenido actual de DataSet como datos XML, sin un esquema XSD. Si no se cargan datos en el DataSet, no se escribe nada. DiffGram: Escribe el DataSet completo como un DiffGram, incluidos los valores originales y actuales. Para generar un DiffGram que contenga únicamente valores modificados, llame a GetChanges y, a continuación, llame a WriteXml como un DiffGram del DataSet devuelto. Ejemplo: DataSet dsViajes; dsViajes = Viajes.ObtenerTodosDS(); dsViajes.WriteXml(@"F:\Temp\Datos.xml", XmlWriteMode.WriteSchema); V1.0 Profesor: Pablo Ulman (Polshu) DataSet ReadXml(string filename, XmlReadMode mode) Lee el esquema y los datos XML del DataSet mediante el archivo y el XmlReadMode especificados. Auto (default): Realiza la acción más apropiada de las que se muestran a continuación. Si los datos constituyen un DiffGram, establece XmlReadMode en DiffGram, o bien si el conjunto de datos ya tiene un esquema o el documento contiene un esquema en línea, establece XmlReadMode en ReadSchema. O bien, si el conjunto de datos aún no tiene un esquema y el documento no contiene un esquema en línea, establece XmlReadMode en InferSchema. ReadSchema: Lee cualquier esquema en línea y carga los datos. Si el DataSet ya contiene un esquema, se pueden agregar al mismo las nuevas tablas, aunque se producirá una excepción si cualquier tabla del esquema en línea ya existe en el DataSet. IgnoreSchema: Omite cualquier esquema en línea y lee los datos del esquema del DataSet existente. Si los datos constituyen un DiffGram, IgnoreSchema tiene la misma funcionalidad que DiffGram. InferSchema: Omite cualquier esquema en línea, deduce el esquema a partir de los datos y los carga. Si el DataSet ya contiene un esquema, se extiende el esquema actual mediante la adición de nuevas tablas o la adición de columnas a las tablas existentes. Se producirá una excepción si la tabla deducida ya existe con un espacio de nombres distinto, o si cualquiera de las columnas deducidas entra en conflicto con las columnas existentes. DiffGram: Lee un DiffGram, aplicando los cambios del DiffGram a DataSet. La semántica es idéntica a la de una operación Merge. Al igual que ocurre con la operación Merge, se conservan los valores RowState. La entrada a ReadXml mediante DiffGrams sólo se puede obtener si se utiliza la salida de WriteXml como un DiffGram. El DataSet de destino debe tener el mismo esquema que el DataSet en el que se llama a WriteXml como DiffGram. De lo contrario, se producirá un error en la operación de combinación de DiffGram y se producirá una excepción. Fragment: Lee fragmentos XML, como los que se generan al ejecutar consultas FOR XML, en una instancia de SQL Server. Al establecer XmlReadMode en Fragment, se lee el espacio de nombres predeterminado como el esquema en línea. InferTypedSchema: Omite cualquier esquema en línea, deduce el esquema con establecimiento inflexible de tipos a partir de los datos y los carga. Si el tipo no se puede deducir de los datos, se interpreta como datos de cadena. Si el DataSet ya contiene un esquema, se extiende el esquema actual mediante la adición de nuevas tablas o columnas a las tablas existentes. Se producirá una excepción si la tabla deducida ya existe con un espacio de nombres distinto, o si cualquiera de las columnas deducidas entra en conflicto con las columnas existentes. Algunas propiedades del DataSet: DataSetName: Obtiene o establece el nombre del objeto DataSet actual. Relations: Obtiene la colección de relaciones que vincula las tablas y permite el desplazamiento desde las tablas primarias a las secundarias. Tables: Obtiene la colección de tablas incluidas en DataSet. V1.0 Profesor: Pablo Ulman (Polshu) V1.0 DataSet Profesor: Pablo Ulman (Polshu) DataSet DataTable (System.Data): Una DataTable representa una tabla de datos en memoria. Si se va a crear un DataTable mediante programación, en primer lugar se debe definir su esquema agregando objetos DataColumn al DataColumnCollection (al que se obtiene acceso mediante la propiedad Columns). Para obtener más información sobre la adición de objetos DataColumn, vea Agregar columnas a una tabla. Para agregar filas a DataTable, en primer lugar se debe utilizar el método NewRow para devolver un nuevo objeto DataRow. El método NewRow devuelve una fila con el esquema de DataTable, tal como lo define el DataColumnCollection de la tabla. El número máximo de filas que puede almacenar un objeto DataTable es 16.777.216. Para obtener más información, vea Agregar datos a una tabla. DataTable también contiene una colección de objetos Constraint que se pueden utilizar para asegurar la integridad de los datos. Para obtener más información, vea Agregar restricciones a una tabla. DataRow (Clase) Representa una fila de datos en un DataTable. Los objetos DataRow y DataColumn son componentes principales de un DataTable. Utilice el objeto DataRow y sus propiedades y métodos para recuperar, evaluar, insertar, eliminar y actualizar los valores de DataTable. DataRowCollection representa los objetos DataRow reales de DataTable y DataColumnCollection contiene los objetos DataColumn que describen el esquema de DataTable. Utilice la propiedad Item sobrecargada para devolver o establecer el valor de DataColumn. Utilice las propiedades HasVersion y IsNull para determinar el estado de un valor de fila concreto y la propiedad RowState para determinar el estado de la fila con relación a su objeto DataTable primario. Para crear un DataRow nuevo, utilice el método NewRow del objeto DataTable. Después de crear un DataRow nuevo, utilice el método Add para agregar el nuevo DataRow a DataRowCollection. Por último, llame al método AcceptChanges del objeto DataTable para confirmar la adición. Para obtener más información sobre la adición de datos a un DataTable, vea Agregar datos a DataTable. Puede eliminar un DataRow de DataRowCollection llamando al método Remove de DataRowCollection, o bien llamando al método Delete del objeto DataRow. El método Remove quita de la colección la fila. En cambio, Delete marca el DataRow que se va a quitar. La eliminación real se produce cuando se llama al método AcceptChanges. Al llamar a Delete, se puede comprobar mediante programación qué filas están marcadas para eliminación antes de eliminarlas. V1.0 Profesor: Pablo Ulman (Polshu) DataSet DataColumn (Clase) Representa el esquema de una columna en un DataTable. El DataColumn es el bloque constructivo fundamental para crear el esquema de un DataTable. Para construir el esquema, se agregan uno o varios objetos DataColumn al DataColumnCollection. Cada DataColumn tiene una propiedad DataType que determina el tipo de datos que contiene el DataColumn. Por ejemplo, se puede restringir el tipo de datos a enteros, cadenas o decimales. Puesto que los datos incluidos en el objeto DataTable normalmente se vuelven a combinar en su origen de datos original, se debe hacer coincidir los tipos de los datos con los del origen de datos Propiedades como AllowDBNull, Unique y ReadOnly aplican restricciones en la entrada y actualización de datos, lo que contribuye a garantizar la integridad de éstos. También se pueden utilizar las propiedades AutoIncrement, AutoIncrementSeed y AutoIncrementStep para controlar la generación automática de datos. También se puede garantizar que los valores de un objeto DataColumn son únicos mediante la creación de una restricción UniqueConstraint y su adición a la colección ConstraintCollection del objeto DataTable al que pertenece el objeto DataColumn. Para crear una relación entre objetos DataColumn, cree un objeto DataRelation y agréguelo al DataRelationCollection de un DataSet. También se puede utilizar la propiedad Expression del objeto DataColumn para calcular los valores de una columna o para crear una columna agregada. DataRowView (Miembros) Representa una vista personalizada de DataRow. Cuando se muestran datos, como en un control DataGrid, sólo se puede mostrar una versión de cada fila. La fila que se muestra es un DataRowView. DataRowView sólo puede tener uno de los cuatro estados de versión diferentes: Default, Original, Current y Proposed. Tras invocar BeginEdit en un DataRow, cualquier valor que se haya editado se convertirá en el valor Proposed. Hasta que se invoque a CancelEdit o a EndEdit, la fila tendrá una versión Original y otra Proposed. Si se invoca a CancelEdit, se descartará la versión propuesta y el valor volverá a ser Original. Si se invoca a EndEdit, el objeto DataRowView dejará de tener una versión Proposed. En su lugar, el valor propuesto se convertirá en el valor actual. Los valores predeterminados sólo se encuentran disponibles en las filas que tienen columnas con valores predeterminados definidos. V1.0