Académique Documents
Professionnel Documents
Culture Documents
Especializacin en .NET
Modulo 2: Tecnologas de acceso a
datos
Definicin
ADO.NET provee un acceso consistente entre
fuentes de datos, como MSSQL, OLEDB, XML, etc.
ADO.NET provee mecanismos para ejecutar
comandos y obtener los resultados.
Cada vez es ms comn codificar informacin en
XML para pasarla a trabes de conexiones de red.
Este modelo es muy diferente al modelo de la era
cliente/servidor donde se mantena una conexin
abierta durante la ejecucin de un programa.
ADO.NET fue diseado para las solucionar las
necesidades de este nuevo modelo, con una
arquitectura desconectada, integracin con XML,
representacin comn de los datos y la posibilidad de
combinar datos de varias fuentes de datos.
Proveedores de datos
Proveedores de datos
Es recomendable utilizar un proveedor de datos
especifico para el manejador de base de datos a
usar si esta est disponible, ya que este
aprovecha completamente las caractersticas de
este, mejorando el rendimiento y la funcionalidad
ofrecida.
La nomenclatura de las clases de ADO.NET es
sencilla. Dependiendo de el proveedor de datos
el nombre de las clases cambia, la nomenclatura
usada es <Proveedor>Nombre de clase.
Definicin
ADO.NET permite el acceso desconectado a datos.
En este modelo se llena un DataSet a travs de
un DataAdapter.
Cada proveedor de datos debe de brindar su
DataAdapter, el cual debe de ser el encargado
de llenar un DataSet y actualizar la base de
datos segn los cambios en el DataSet.
El DataSet es una coleccin de DataTable, cada
una de ellas contiene DataRow y DataColumn.
DataSet
DataSet
DataTable
DataColumn
DataTable
DataRow
Relaciones
Esquema XML
XML
Restricciones
Ejemplo
//Crea Dataset
Datos = new DataSet("CuentaBancaria");
//Crea un DataTable
DataTable tablaClientes = new DataTable("clientes");
DataColumn colNumcta = new DataColumn("numcta", typeof(int));
DataColumn colNombre = new DataColumn("nombre", typeof(string));
DataColumn colApellidos = new DataColumn(apellidos", typeof(string));
/ DataColumn colSaldo = new DataColumn("saldo", typeof(double));
// Crea las columnas para el DataTable
tablaClientes.Columns.Add(colNumcta);
tablaClientes.Columns.Add(colNombre);
tablaClientes.Columns.Add(colApellidos);
tablaClientes.Columns.Add(colSaldo);
// Agrega la Tabla al DataSet
Datos.Tables.Add(tablaClientes);
Ejemplo
// Crea nuevo Cliente
DataRow nuevoCliente = Datos.Tables["clientes"].NewRow();
// Asigna datos al nuevo cliente
nuevoCliente["numcta"] = 123;
nuevoCliente["nombre"] = "Claudia";
nuevoCliente[apellidos"] = "Lopez";
nuevoCliente["saldo"] = 1500.55;
// Agrega nuevo cliente a tabla de clientes
Datos.Tables["clientes"].Rows.Add(nuevoCliente);
Ejemplo
//Crea Dataset
Datos = new DataSet("CuentaBancaria");
//Crea un DataTable
DataTable tablaClientes = new DataTable("clientes");
// Crea las columnas para el DataTable
tablaClientes.Columns.Add(new DataColumn("numcta", typeof(int)));
tablaClientes.Columns.Add(new DataColumn("nombre", typeof(string)));
tablaClientes.Columns.Add(new DataColumn(apellidos, typeof(string)));
tablaClientes.Columns.Add(new DataColumn("saldo", typeof(double)));
// Agrega la Tabla al DataSet
Datos.Tables.Add(tablaClientes);
// Crea nuevo Cliente
DataRow nuevoCliente = Datos.Tables["clientes"].NewRow();
// Asigna datos al nuevo cliente
nuevoCliente["numcta"] = 123;
nuevoCliente["nombre"] = "Claudia";
nuevoCliente[apellidos"] = Lopez";
nuevoCliente["saldo"] = 1500.55;
Propiedades de Columna
Columnas Calculadas
En ocasiones es necesario contar con columnas
con informacin generada a partir de otras
columnas.
tablaClientes.Columns["NombreCompleto"].Expression =
"nombre + + apellidos";
Serializacin XML
WriteXML
Archivo
XML
Objeto
DataSet
ReadXML
Archivo
XML
Ejemplo
Datos = new DataSet();
Eliminacin de DataRow
Delete (). Elimina un DataRow
Datos.Tables["clientes"].Rows[0].Delete();
Cambiar un DataRow
Datos.Tables["clientes"].Rows[0][cuenta]=890;
Datos.Tables["clientes"].Rows[0][nombre]=Jose;
Datos.Tables["clientes"].Rows[0][apellidos]=Lopez;
Control de Cambios
Mientras se estn realizando cambios en un
conjunto de datos mediante la actualizacin,
insercin y eliminacin de registros, el conjunto
de datos mantiene las versiones original y actual
de los registros.
Se puede realiza el seguimiento de la propiedad
RowState de cada fila para indicar si los
registros estn en su estado original o si se han
modificado, agregado o eliminado.
Control de Cambios
Se puede confirmar los cambios llamando al mtodo
AcceptChanges de DataSet, DataTable o DataRow.
Cada fila de datos contiene informacin sobre la
propiedad RowState ( Added, Modified, Deleted,
Unchanged).
Al llamar a AcceptChanges, cualquier objeto
DataRow que an est en el modo de edicin finaliza
correctamente el proceso de edicin. La propiedad
RowState de cada DataRow tambin cambia; las
filas en estado Added y Modified se convierten en
Unchanged, y se quitan las filas Deleted.
Control de Cambios
Al llamar a AcceptChanges, cualquier objeto
DataRow que an est en el modo de edicin
finaliza correctamente el proceso de edicin. La
propiedad RowState de cada DataRow tambin
cambia; las filas en estado Added y Modified se
convierten en Unchanged, y se quitan las filas
Deleted.
Busquedas en DataTable
Select(). Obtiene una vector de todos los objetos
DataRow
DataRow []info =null;
info = Datos.Tables["clientes"].Select();
if (info != null)
{
for (int i = 0; i < info.Length;i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}
Busquedas en DataTable
Select (string criterio). Obtiene una vector de
todos los objetos DataRow que coinciden con los
criterios de filtro por orden de clave principal (o si
sta no existe, por orden de adicin).
info = Datos.Tables["clientes"].Select("nombre = 'claudia ");
if (info != null)
{
for (int i = 0; i < info.Length; i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}
Busquedas en DataTable
Select(string criterio, string ordenar). Obtiene
una matriz de todos los objetos DataRow que
coinciden con los criterios de filtro, en el criterio
de ordenacin especificado.
info = Datos.Tables["clientes"]. Select("numcta< 10020", "nombre ASC");
if (info != null)
{
for (int i = 0; i < info.Length; i++ )
Console.WriteLine("{0} {1}",info[i]["numcta"], info[i]["nombre"]);
}
Buscar un DataRow
Find(ClavePrincipal) Obtiene la fila especificada
por el valor de clave principal. Obtiene la fila
especificada por el valor de clave principal.
// Busca numcta (Numero de Cuenta )
DataRow reg = Datos.Tables["clientes"].Rows.Find(10038);
if (reg != null)
{
Console.WriteLine("{0} {1}", reg["numcta"], reg["nombre"]);
}
Ejercicio
Desarrolle una aplicacin para el control del acervo bibliogrfico de
una biblioteca, tome en cuenta que se tienen libros con prstamo
a domicilio.
El programa debe contar con lo siguiente:
a)
b)
c)
d)
e)
Ejercicio
Desarrolle una programa que mantenga el control de los
empleados de una empresa tomando en cuenta que se
tienen los datos personales del empleado (cdigo,
nombre, apellidos), una relacin de los nombres de los
distintos departamentos, as como otra relacin de los
puestos existentes con su respectivo sueldo.
No olvide que cada empleado pertenece a un
departamento y cuenta con un puesto.
El programa debe agregar nuevos empleados,
departamentos o puestos, adems de emitir un listado de
los empleados registrados y aunado a de los reportes de
los distintos departamentos y puestos.
Es importante que los datos sean almacenados y
recuperados de un archivo.
Relaciones en DataSet
padreCol
Tabla Padre
DataRelation
hijaCol
Tabla Hija
DataSet
Relaciones en DataSet
Crea una relacin
dsRecursosHumanos.Relations.Add(
"Departamento_Empleados",
dtDepartamentos.Columns["depID"],
dtEmpleados.Columns["empDepto"],
true
);
Relaciones en DataSet
Recuperacin de datos padre de una relacin
for (int i = 0; i < dtEmpleados.Rows.Count; i++) {
dsRecursosHumanos.Relations.Add(
// Recupera datos de la relacion"Departamento_Empleados",
dtDepartamentos.Columns["depID"],
DataRow drDepto =
dtEmpleados.Columns["empDepto"]
dtEmpleados.Rows[i].GetParentRow("Departamento_Empleados");
);
Console.WriteLine("{0} {1} {2} {3}", dtEmpleados.Rows[i]["empID"],
dtEmpleados.Rows[i]["empNombre"],
drDepto["depNombre"]
);
}
Relaciones en DataSet
Recuperacin de datos hijos de una relacin
for (int i = 0; i < dtDepartamentos.Rows.Count; i++)
{
// Muestra los departamentos
dsRecursosHumanos.Relations.Add(
Console.WriteLine(" Departamento {0} {1} ",
"Departamento_Empleados",
dtDepartamentos.Rows[i]["depID"],
dtDepartamentos.Columns["depID"],
dtDepartamentos.Rows[i]["depNombre"]);
dtEmpleados.Columns["empDepto"]
// Recupera Datos de empleados del departamento
);
DataRow[] drEmpleados = dtDepartamentos.
Rows[i].GetChildRows("Departamento_Empleados");
// Muestra los empleados del departamento
foreach (DataRow emp in drEmpleados ){
Console.WriteLine("{0} {1} {2}",emp["empID"],
emp["empNombre"],
emp["empApellidos"]);
}
Ejercicio
Del Ejercicio anterior emita un reporte de los
empleados por departamento y de los
empleados por puesto, as como eliminar
empleados, departamento o puesto.
Restricciones en DataSet
Se pueden utilizar restricciones con el fin de
mantener la integridad de los datos. Una restriccin
es una regla automtica que se aplica a una columna
relacionada, que determina cmo proceder cuando
se modifica de alguna manera el valor de una fila.
Existen dos tipos de restricciones en ADO.NET:
ForeignKeyConstraint y UniqueConstraint. De
forma predeterminada, las dos restricciones se crean
automticamente al crear una relacin entre dos o
ms tablas agregando DataRelation al DataSet. Sin
embargo, se puede deshabilitar este comportamiento
especificando false en el tercer parmetro al crear la
relacin.
Restricciones en DataSet
ForeignKeyConstraint
Esta regla establece cmo se propagan las
actualizaciones y eliminaciones a las tablas relacionadas.
Por ejemplo, si se actualiza o elimina el valor de una fila
de una tabla y el mismo valor tambin se utiliza en una o
varias tablas relacionadas, ForeignKeyConstraint
determinar qu sucede en las tablas relacionadas.
Las restricciones se aplican cuando la propiedad
System.Data.DataSet.EnforceConstraints del DataSet es
true
Las propiedades DeleteRule y UpdateRule de
ForeignKeyConstraint definen la accin que se ha de
realizar cuando el usuario intente eliminar o actualizar una
fila en una tabla relacionada.
Restricciones en DataSet
Establecimiento de reglas
Descripcin
Cascade
SetNull
SetDefault
None
Restricciones en DataSet
Crear una Restriccin
ForeignKeyConstraint fkEmpleadosDeparatamento =
new ForeignKeyConstraint(
fkEmpleados_Departamentos",
dtDepartamentos.Columns["depID"],
dtEmpleados.Columns["empDepto"]);
fkEmpleadosDeparatamento.DeleteRule = Rule.None;
fkEmpleadosDeparatamento.UpdateRule = Rule.Cascade;
dtEmpleados.Constraints.Add(fkEmpleadosDepartamento);
Ejercicio
Complemente el Ejercicio anterior permitiendo
realizar actualizaciones a las claves y nombres
de departamento as como a las claves, nombres
de puesto y sueldo.
Ejercicio
Al ejercicio Biblioteca agregue la posibilidad de
mantener un catalogo de usuarios, los cuales
debern esta relacionados con los prestamos
realizados.
Debiendo adems contar con las opciones de
suspender usuario, activar y eliminar usuario
siempre y cuando no cuente con libros
prestados.
Fuentes de datos
WriteXML
DataAdapter
Objeto
DataSet
Base de
datos
SQL Server
MySQL
PostgreSQL
Oracle
Access
Archivo
XML
ReadXML
Archivo
XML
data source
initial catalog
uid
pwd
string strCon = @Data Source = miservidor.net;
Initial Catalog=inventario; UID=userdb; PWD=123;";
SqlConnection conexion = new SqlConnection(strCon);
conexion.Open();
Server
DataBase
uid
pwd
string strCon =
@Server=miservidor.net;
DataBase=clientes; UID=userdb; PWD=123;";
SqlConnection conexion = new SqlConnection(strCon);
conexion.Open();
USE clientes;
Server
DataBase
uid
pwd
string strCon =
@"server=miservidor.net;
DataBase=clientes;uid=userdb; pwd=123;";
MySqlConnection conexion = new MySqlConnection(strCon);
conexion.Open();
data source
initial catalog
uid
pwd
string strCon = @"data source = miservidor.net;
initial catalog=inventario; uid=userdb; pwd=123;";
MySqlConnection conexion = new MySqlConnection(strCon);
conexion.Open();
USE clientes;
c:\users\gerardo\archdb.accdb;
Provider=Microsoft.ACE.OLEDB.12.0;
Jet OLEDB:Database Password=123;";
c:\basededatos\archdb.xlsx;
Provider=Microsoft.ACE.OLEDB.12.0;
Extended Properties=Excel 12.0;";