Académique Documents
Professionnel Documents
Culture Documents
Orientada a
Objetos II
2
NDICE
Presentacin 5
Red de contenidos 6
Sesiones de aprendizaje
Unidad de aprendizaje 1
SEMANA 1 : Arquitectura de ADO .NET, conexin a un base de datos, 7
consulta de datos
SEMANA 2 : Operaciones de consultas y recuperacin de datos 23
utilizando DataAdapter, DataReader y Command
SEMANA 3 : Manejo del TableAdapter, Usando LINQ to SQL. 39
SEMANA 4 : Modificacin de datos de una fuente de datos, manejo de 59
transacciones de datos
Unidad de aprendizaje 2
SEMANA 5 : Operaciones desconectadas con programacin 83
SEMANA 6 : Operaciones desconectadas: Manejo del DataView y el 103
DataTableReader desde un DataSet
SEMANA 7 : Semana de exmenes parciales teora
SEMANA 8 : Semana de exmenes parciales laboratorio
Unidad de aprendizaje 3
SEMANA 9 : Manejo de Crystal Report 115
Unidad de aprendizaje 4
SEMANA 10 : Modelo relacional de objetos: LINQ to SQL 131
SEMANA 11 : Modelo ADO.NET Entity FrameWork, arquitectura 147
SEMANA 12 : Actualizacin de datos utilizando objetos EntityClient 163
Unidad de aprendizaje 5
SEMANA 13 : Operaciones XML en datos desconectados 177
Procesamiento de datos XML utilizando DOM
SEMANA 14 : Consulta XML utilizando XPath, 201
SEMANA 15 : Examen final de laboratorio
SEMANA 16 : Sustentacin de proyectos
SEMANA 17 : Examen final de teora
PRESENTACIN
RED DE CONTENIDOS
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
ADO.NET incorpora varios proveedores de datos que permiten conectar con SQL
Server y Oracle, as como otros que facilitan el uso de controladores ODBC y OLE
DB para acceder a aquellos provenientes de Excel, Access, MySQL, etc. Adems
incorpora el nuevo modelo de factoras que hace posible un acceso genrico a
orgenes de datos, la obtencin de informacin de esquema, las caractersticas
especficas para SQL Server o las nuevas capacidades del objeto Datatable.
Objeto Descripcin
Transaction Permite incluir comandos en las transacciones
que se realizan en el origen de datos.
CommandBuilder Objeto que genera, automticamente, las
propiedades de comando de un DataAdapter
o que obtiene, de un procedimiento
almacenado, informacin acerca de
parmetros con las que puede rellenar la
coleccin Parameters de un objeto
Command.
ConnectionStringBuilder Objeto que genera y maneja una cadena de
conexin utilizada por el objeto Connection.
Parameter Define los parmetros de entrada, salida y
valores devueltos para los comandos y
procedimientos almacenados.
Exception Se devuelve cuando se detecta un error en el
origen de datos. En el caso de que el error se
detecte en el cliente, los proveedores de datos
de .NET Framework inician una excepcin de
.NET Framework.
Error Expone la informacin relacionada con una
advertencia o error devueltos por un origen de
datos.
ClientPermission Se proporciona para los atributos de seguridad
de acceso a cdigo de los proveedores de
datos de .NET Framework.
Para conectarse a una base de datos por ADO .NET, debe proveer de una
cadena de conexin para identificar la base de datos. Los valores que se incluyen
en una cadena de conexin dependen del origen de datos que utilice. A
continuacin describiremos algunos parmetros de la cadena de conexin.
Parmetro Descripcin
Provider Parmetro para conexiones de datos OLE DB
Initial Catalog o DataBase El nombre de la base de datos
Data Source Nombre o direccin de red del origen de datos
Integrated Security o Si el parmetro es false, debe especificar User
Trusted_Connection ID y Password en la cadena de conexin. Si es
true, la cuenta de autenticacin es de
Windows.
User ID Cuenta de usuario
Password Clave de la cuenta de usuario ingresada
Persist Security Info SI el parmetro es false el origen de datos
(data source) no retorna seguridad sensitiva
como el password, por defecto es false.
El Data Provider del .NET Framework para SQL Server provee la conectividad a
SQL Server 7.0 o posterior. Para conectarse a SQL Server utilice la clase
SqlConnection desde el namespace System.Data.SqlClient.
End Using
<connectionStrings>
<add name="cnfactura" connectionString="Data Source=(local);
DataBase=BDFactura; integrated Security=true"/>
</connectionStrings>
Imports System.Data.SqlClient
Imports System.Configuration.ConfigurationManager
ADO .NET, posee una clase que permite ejecutar consultas sobre la base de datos:
sentencias SQL embebidas, procedimientos almacenados, funciones; es la clase
SqlCommand. La clase SqlCommand tiene 4 mtodos que permite utilizar para
ejecutar sentencias SQL:
SqlCommand Descripcin
ExecuteScalar Ejecuta una consulta que retorna un valor.
ExecuteReader Ejecuta una consulta que retorna un conjunto de
datos a un DataReader.
ExecuteNonQuery Ejecuta una Sentencia para actualizar los datos.
ExecuteXmlReader Ejecuta una consulta y retorna un conjunto de
datos en XML.
5.1 Ejecutar una consulta en la base de datos
1. Crear un objeto Connection, tal como SqlConnection.
2. Crear un objeto Command, tal como SqlCommand. En el constructor
especificar la sentencia sql que se va a ejecutar y especificar la conexin.
3. Al ejecutar la sentencia sql, especificar la propiedad CommandType. Si va
a ejecutar una sentencia SQL el valor del CommandType es
CommandType.Text; si va a ejecutar un procedimiento almacenado el
valor del CommandType ser CommandType.StoredProcedure.
4. Llame al mtodo Open del objeto Conexin.
5. Ejecute el mtodo del objeto Command, asignando su resultado a una
variable o control.
6. Llame al mtodo Close del objeto conexin.
<connectionStrings>
<add name="cn"
connectionString="server=.;database=DBVentas;integrated
security=true"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Imports System.Data.Common
Imports System.Configuration.ConfigurationManager
Private db As DbProviderFactory =
DbProviderFactories.GetFactory(ConnectionStrings("cn").ProviderName)
LABORATORIO 1.1
ACCESO A DATOS EN UN FORMULARIO WINDOWS FORM,
UTILIZANDO EL ASISTENTE
En este Laboratorio, presentamos un formulario Windows Forms sencillo que muestra
los datos de la tabla artculos en una cuadrcula de datos (DataGridView).
Permite
visualizar la
lista de tareas
del control
Clickea para
aadir un
origen de
datos al
proyecto
9. Al aadir una nueva conexin, se visualiza una ventana para crear la conexin
a la base de datos, donde se ingrese el nombre del servidor Server Name,
seleccione la autenticacin Log on to the Server y seleccione la base de datos
Select o enter a DataBase Name.
Ingrese el servidor, si
utiliza SQL Server 2005,
su servidor ser:
(local)\SQLEXPRESS.
Seleccione la
autenticacin, que puede
ser por Windows o SQL
Server.
Seleccione la base de
datos de la lista
Conexin
generada por el
asistente.
Presione la
opcin
ConnectionString
para visualizar la
cadena de
conexin.
11. Creada la conexin, debemos elegir la tabla artculos para realizar la consulta,
tal como se muestra en la figura. Se puede observar que junto a la seleccin de
la tabla artculos se crear un DataSet llamado BDFacturaDataSet, para
almacenar la estructura de la tabla artculos. Luego, presione el botn Finish.
Seleccione la tabla
artculos de la base
de datos.
Al seleccionar el
objeto de base de
datos, se crear un
DataSet.
LABORATORIO 1.2
ACCESO A DATOS EN UN FORMULARIO WINDOWS FORM,
UTILIZANDO CODIGO DE PROGRAMACION
En este laboratorio, poblaremos un DataGridView con la informacin de los clientes de
la base de datos DBVentas basada en una cadena select SQL. A continuacin,
ejecutaremos los pasos para ejecutar la consulta SQL y mostrar los resultados en la
cuadrcula.
1. Agregue un nuevo formulario de windows al proyecto
2. Agregue un control Label y un control DatGridView tal como se muestra en la
figura.
Control Label
Control
DataGridView
Imports System.Data.SqlClient
6. Programa las sentencias en el Evento Load del Form1, para listar los clientes:
a. Definir la instancia del objeto DataAdapter llamado da, ejecutando la
sentencia de consulta de la tabla tb_clientes.
b. La sentencia SQL se ejecutar en el mtodo SelectCommand y los
registros resultantes se almacenar en el DataAdapter da.
c. Definir un DataTable llamado tabla.
d. Poblar los registros resultantes de DataAdapter (da) en tabla.
e. Asignar al origen de datos del DataGridView1 el objeto tabla.
f. Ejecutar la aplicacin.
LABORATORIO 1.3
EJECUTAR UN PROCEDURE EN UN FORMULARIO WINDOWS
FORM, UTILIZANDO DBFACTORY PROVIDER
En este laboratorio, poblaremos un DataGridView al ejecutar un procedimiento
almacenado en la base de datos DBVentas, que visualiza los registros de los
proveedores. Los siguientes pasos permitirn ejecutar un procedimiento almacenado.
1. En el Administrador de la base de Datos, defina el procedimiento almacenado
en la base de datos.
<connectionStrings>
<add name="cn"
connectionString="server=.;database=DBVentas;integrated
security=true"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Imports System.Data.Common
Imports System.Configuration.ConfigurationManager
7. Programe las siguientes sentencias en el evento load del Form1 para ejecutar
el procedimiento almacenado:
a. Defina un DBConnection llamado cn, asigne en la propiedad
ConnectionString el objeto definido en el app.config llamado cn.
b. Defina un DBCommand llamado cmd. Asigne: en la propiedad
Connection la conexin cn, en la propiedad CommandText el nombre
del procedure, en la propiedad CommandType el tipo de comando, el
cual ser un procedimiento almacenado.
c. Defina un DbDataAdapter llamado da.
d. Asigna en la propiedad SelectCommand del DataAdapter, el comando.
e. Defina un DataTable llamado tabla.
f. Poblar los registros resultantes de DataAdapter (da) en tabla.
g. Asigna al origen de datos del DataGridView1 el objeto tabla.
8. Ejecute la aplicacin.
Autoevaluacin
5. Qu es el Connection Pooling?
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
6. Cules son los objetos para realizar una conexin utilizando DBFactory
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
Resumen
El proveedor de datos .NET de SQL Server o del proveedor de datos .NET de OLE
DB requiere de la instalacin de la versin 2.8 de Microsoft Data Access
Components.
http://msdn2.microsoft.com/es-es/library/e80y5yhx(VS.80).aspx
Referencia a ADO.NET 2.0
http://msdn.microsoft.com/es-es/library/27y4ybxw(VS.80).aspx
Referencia a la arquitectura de ADO.NET
http://sabia.tic.udc.es/docencia/is/old/2006-2007/docs/transparencias/03-
ADO.NET.pdf
Referencia a ADO.NET, arquitectura, diseo e implementacin
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
Proveedor Descripcin
OleDataAdapter Proveedor de datos para OLE DB
SqlDataAdapter Proveedor de datos para SQL Server
OdbcDataAdapter Proveedor de datos para ODBC
OracleDataAdapter Proveedor de datos para Oracle
El mtodo Fill del DataAdapter se usa para llenar un DataSet con los
resultados de la propiedad SelectCommand del DataAdapter. El mtodo Fill
acepta como argumentos un DataSet que se debe llenar y un objeto
DataTable, o su nombre, que se debe llenar con las filas que devuelve
SelectCommand.
Proveedor Descripcin
OleDataReader Proveedor de datos para OLE DB
SqlDataReader Proveedor de datos para SQL Server
OdbcDataReader Proveedor de datos para ODBC
OracleDataReader Proveedor de datos para Oracle
El mtodo Read del objeto DataReader permite obtener una fila a partir de los
resultados de una consulta.
Para tener acceso a cada columna de la fila devuelta, puede pasar a DataReader
el nombre o referencia numrica de la columna en cuestin.
Sin embargo, el mejor rendimiento se logra con los mtodos que ofrece el
DataReader y que permiten tener acceso a los valores de las columnas en sus
tipos de datos nativos (GetDateTime, GetDouble, GetGuid, GetInt32, etc).
Proveedor Descripcin
OleDbCommand Proveedor de datos para OLE DB
SqlCommand Proveedor de datos para SQL Server
OdbcCommand Proveedor de datos para ODBC
OracleCommand Proveedor de datos para Oracle
Mtodo Descripcin
ExecuteReader Los resultados se devuelven en una secuencia
de datos para devolver un objeto DataReader.
ExecuteScalar Retorna valor Singleton.
ExecuteNonQuery Se utiliza para ejecutar comandos que no
retornan filas.
cn.Open()
Using cmd As New SqlCommand("Select art_nombre, art_precio
From dbo.Articulos", cn)
Dim reader As SqlDataReader
reader = cmd.ExecuteReader( _
CommandBehavior.CloseConnection Or CommandBehavior.SingleResult)
If reader.HasRows Then
While reader.Read
ListBox1.Items.Add(reader.GetString(0) + vbTab + _
reader.GetDecimal(1).ToString)
End While
End If
reader.Close()
End Using
...........
Dim da As New SqlDataAdapter
da.SelectCommand = cmd
Dim ds As New DataSet
da.Fill(ds, "Facturas")
End Using
LABORATORIO 2-1
CONSULTA DE DATOS, UTILIZANDO COMMAND
En este escenario, se mostrar los registros almacenados en la tabla clientes de la
base de datos BDFactura; para lo cual se har uso del objeto Command, para
ejecutar la sentencia SQL, el objeto DataAdapter para recuperar los registros.
Control Label
Control
DataGridView
LABORATORIO 2-2
CONSULTA DE DATOS, UTILIZANDO COMANDOS
PARAMETRIZADOS
En este escenario desarrollaremos una consulta a las facturas por cliente, donde al
seleccionar un cliente dentro de un ComboBox, visualizamos las facturas
correspondientes al cliente seleccionado.
Control
ComboBox
Control
DataGridView
Propiedad Descripcin
DataSource Origen de datos del control.
DisplayMember Campo a visualizar.
ValueMember Valor del campo permanecer oculto.
LABORATORIO 2-3
CONSULTA DE DATOS, UTILIZANDO PROCEDURES Y
PARMETROS
En este escenario, desarrollaremos una consulta a las facturas por vendedor y ao,
donde al seleccionar un vendedor dentro de un ComboBox y un ao dentro de un
ComboBox, visualizamos las facturas correspondientes al vendedor y ao
seleccionado.
1. Agregue un nuevo formulario de Windows al proyecto.
Control
ComboBox
CboVendedor
Control Button
BtnConsulta
Control
ComboBox
CboAo
Control
DataGridView
DGFactura
da = New SqlDataAdapter
da.SelectCommand = cmd Enlazar el CboAo a
tabla, enlazamos los
tabla = New DataTable datos en el
da.Fill(tabla) DisplayMember y
ValueMember
Me.CboAo.DataSource = tabla
Me.CboAo.DisplayMember = "y"
Me.CboAo.ValueMember = "y"
LABORATORIO 2-4
NAVEGACIN DE REGISTROS DE DATOS.
En este escenario vamos a navegar por la filas de una tabla de un DataSet, mediante
el empleo de la clase CurrencyManager.
Qu es el objeto CurrencyManager?
El objeto CurrencyManager le permite sincronizar controles enlazados a medida que
un usuario examina las filas de una tabla. Por ejemplo, CurrencyManager le permite
mostrar las propiedades FirstName y LastName correctas en controles TextBox
enlazados diferentes a medida que un usuario examina la tabla clientes.
Controles
TextBox
Controles
Button
5. En el evento Load del Form, cargamos el DataSet ds, que permitir enlazar los
datos a los TextBox; luego, especificamos el CurrencyManager de la tabla.
txtcodigo.DataBindings.Add( _
"Text", ds.Tables!Clientes, "cli_codigo")
txtdireccion.DataBindings.Add( _
"Text", ds.Tables!Clientes, "cli_direccion")
txtnombre.DataBindings.Add( _
"Text", ds.Tables!Clientes, "cli_nombre")
txtruc.DataBindings.Add( _
"Text", ds.Tables!Clientes, "cli_ruc")
'Especificar el CurrencyManager de la tabla Clientes.
myCurrencyManager =
CType(Me.BindingContext(ds.Tables!Clientes), CurrencyManager)
myCurrencyManager.Position = myCurrencyManager.Count
Autoevaluacin
Resumen
http://msdn2.microsoft.com/es-es/library/ms254953(VS.80).aspx
Pgina que referencia al tema de Trabajo con comandos
http://support.microsoft.com/kb/311543/es
Pgina que referencia al objeto Currency Manager
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
Los alumnos utilizan el asistente del Visual Studio 2005 para crear los objetos de
datos enlazados a un origen de datos.
Los alumnos realizan operaciones de consulta y actualizacin de datos en el
TableAdapter.
Los alumnos utilizan el Mapeo de datos, LINQ, para conectarse a un origen de
datos, para realizar operaciones de consulta y filtro de datos.
1. TABLEADAPTERS
Los TableAdapters proporcionan comunicacin entre su aplicacin y una base de
datos mediante la ejecucin de instrucciones SQL y procedimientos almacenados.
Miembro Descripcin
Seleccione
el Item
DataSet
Asignarle
un Nombre:
DsFactura
Permite agregar un
TableAdapter.
Establece la conexin:
servidor
autenticacin y
base de datos
Al seleccionar SQL
Statement, en la siguiente
ventana definir Select.
Funcin GetData,
retorna los registros.
El proyecto LINQ usa caractersticas de la versin 2.0 del .NET Framework, nuevos
ensamblados relacionados con LINQ, y extensiones para los lenguajes C# y Visual
Basic .NET. Microsoft ha distribuido una versin previa del LINQ, consistente de
estas bibliotecas y compiladores para C# 3.0 y Visual Basic 9. Otros lenguajes,
como F# y Nemerle, han anunciado brindar soporte preliminar.
La clase
tb_empleados, que
representa a la tabla
tb_empleados
LABORATORIO 3.1
MANEJO DE CONSULTA EN UN TABLEADAPTER
En este escenario usted crear un TableAdapter, donde crear una consulta sql que
permita visualizar los pedidos entre dos fechas, adems visualice la cantidad de
facturas resultantes del proceso.
13. Para listar todas las facturas en el evento Load del Formulario se cargar al
DataTable fac_cabe a travs del mtodo Fill del TableAdapter y luego visualice
los datos.
Pedido.Fill(Ds.Fac_cabe)
Me.DGFacturas.DataSource = Ds.tb_pedidoscabe
14. Para listar las facturas entre dos fechas, en el evento click del botn consulta,
se ejecutar el mtodo FillBy con sus dos parmetros de fecha, que representa
al Procedure creado: usp_facturas_byfechas, para cargarlo al DataTable y,
luego, visualizar los datos.
LABORATORIO 3.2
RELACIONES ENTRE TABLEADAPTER
En este escenario, vamos a realizar un consulta entre los clientes y sus pedidos,
donde al seleccionar un cliente, visualizamos los pedidos asociada al cliente
seleccionado.
Para ello creamos un TableAdapter para los clientes y estableceremos la relacin
entre las tablas del DataSet.
Relacin:
Clientes_Pec_cabe
3. Disee el Formulario.
5. En el evento Load del Formulario, cargue los Tables de las tablas clientes y
fac_cabe con los TableAdapter, muestre los clientes en el DataGridView:
DGCliente.
Cli_TableAdapter.Fill(Ds.tb_Clientes)
Fac_TableAdapter.Fill(Ds.tb_pedidoscabe)
Me.DGCliente.DataSource = Ds.tb_Clientes
LABORATORIO 3.3
EJECUTAR UN PROCEDIMIENTO ALMACENADO UTILIZANDO
UN TABLAADAPTER
En este escenario, vamos a ejecutar un procedimiento almacenado de consulta que
liste los pedidos de un ao seleccionado.
1. Defina el procedimiento
almacenado en la base de datos
llamado usp_pedidos_year.
Me.DataGridView1.DataSource = Ds.usp_pedidos_year
LABORATORIO 3.4
MANEJO DE CONSULTAS UTILIZANDO LINQ to SQL
En este escenario, vamos a realizar la consulta de los pedidos por un empleado
seleccionado. Para ello vamos a utilizar LINQ to SQL para realizar la consulta de los
pedidos.
Seleccione la plantilla
para el manejo de las
tablas como clases.
3. Desde el explorador de
servidor arrastre las
tablas hacia el diseador
llamado
DataVentas.dbml, tal
como se muestra.
7. En el evento Load del Formulario, declare la variable empleado para definir los
empleados desde Data. Cargue los empleados en el ComboBox1.
Dim empleado = From emp In Data.tb_empleados
Me.ComboBox1.DataSource = empleado
Me.ComboBox1.DisplayMember = "Nombre"
Me.ComboBox1.ValueMember = "IDempleado"
8. En el evento Click del button BtnConsulta, declare la variable pedidos para definir
la clase tb_pedidoscabe desde el DataVentasDataContext Data y realizar la
consulta de pedidos (p) por empleado seleccionado.
Me.DataGridView1.DataSource = pedidos
LABORATORIO 3.5
MANEJO DE CONSULTA DE PEDIDOS ENTRE FECHAS
UTILIZANDO LINQ to SQL
En este escenario, vamos a realizar la consulta de los pedidos entre dos fechas
ingresadas. Para ello vamos a utilizar en DataConText DataVentasDataContext.
1. Disea el formulario.
3. En el evento Click del button BtnConsulta, declare la variable pedidos para definir
la clase tb_pedidoscabe desde el DataVentasDataContext Data y realizar la
consulta de pedidos (p) entre dos fechas.
Me.DataGridView1.DataSource = pedidos
4. Guarde la aplicacin y ejecute. Al ingresar dos fechas desde los TextBox listaremos
los pedidos entre las fechas ingresadas.
Autoevaluacin
3. Cules son los pasos para crear un TableAdapter para una tabla especfica?
5. Cmo se pueden crear relaciones entre las tablas del DataSet? Explique los
pasos.
6. Cules son las sentencias de programacin que permite poblar los datos de
un TableAdapter a un DataTable?
Resumen
Los TableAdapters proporcionan comunicacin entre su aplicacin y una base de
datos mediante la ejecucin de instrucciones SQL y procedimientos almacenados.
El TableAdapter carga los datos devueltos en su tabla de datos asociada de la
aplicacin o devuelve nuevas tablas de datos ya rellenadas.
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://msdn2.microsoft.com/es-es/library/7zt3ycf2(VS.80).aspx
Pgina referente al TableAdapter
http://msdn2.microsoft.com/es-es/library/87sfaezs(VS.80).aspx
Pgina referente a la consulta de Datos
http://thinkingindotnet.wordpress.com/2007/05/20/usando-linq-to-sql-
1%c2%aa-parte/
Pgina referente al LINQ en .NET
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
Para ejecutar las instrucciones SQL a la base de datos se realiza mediante los
OBJETOS ADO.NET, las cuales proporcionan acceso coherente a orgenes de
datos como Microsoft SQL Server, as como a orgenes de datos expuestos
mediante OLE DB y XML.
connection.Open()
command.Parameters.Add("@id", SqlDbType.Int).Value=12
command.Parameters.Add("@Name", SqlDbType.Char, 15).Value="Iran
2 TRANSACCIN EN .NET
Cuando se compra un libro de una librera en lnea, se intercambia dinero (en
forma de crdito) por el libro. Si el crdito es correcto, una serie de operaciones
relacionadas garantiza que se obtiene el libro y que la librera obtiene el dinero.
Sin embargo, si una operacin sufre un error durante el intercambio, el error
afecta a la totalidad del proceso. No se obtiene el libro y la librera no obtiene el
dinero.
Es til para las aplicaciones que desean utilizar la misma transaccin en varias
llamadas a funciones o varias llamadas a subprocesos. A diferencia de lo que
sucede con la clase TransactionScope, quien escribe las aplicaciones tiene que
llamar de forma especfica a los mtodos Commit y RollBack para confirmar o
anular la transaccin. Cuando se implementa una transaccin, se debe llamar
al mtodo BeginTransaction dentro del objeto de conexin. Al crear la
transaccin, puede especificar el nivel de aislamiento que se aplica a la
transaccin.
Mtodo Descripcin
cn.Close()
La siguiente tabla muestra algunas de las sentencias SQL que se utilizan para
manejar transacciones dentro de la capa de datos
BEGIN TRANSACTION
Update dbo.Articulos Set art_precio=art_precio * 1.5
Where art_codigo=@codprod1
if(@@error=0 AND @@rowcount=1)
Begin
Update dbo.Articulos Set art_precio=art_precio * 2.0
Where art_codigo=@codprod2
End Using
Opcin Descripcin
End Using
LABORATORIO 4.1
ACTUALIZACIN DE DATOS UTILIZANDO PROCEDIMIENTOS
ALMACENADOS.
En este escenario, vamos a realizar la actualizacin de los datos de los empleados,
incluyendo la foto del empleado, utilizando procedimientos almacenados de tipo
INSERT, UPDATE y DELETE, ejecutando los procedures con el objeto COMMAND.
2. Disea el Formulario, incluya el control image para mostrar la foto del empleado.
Function Empleados()
Dim da As New SqlDataAdapter("usp_listado", cn)
Dim tabla As New DataTable
da.Fill(tabla)
Return tabla
End Function
Me.DataGridView1.DataSource = Empleados()
7. Programa el evento Click del boton Examinar que permita buscar la foto del
empleado utilizando el objeto OpenFileDialog.
8. Programa el evento Click del botn Agregar que permite insertar un registro a la
tabla tb_empleados. Ejecute el procedimiento almacenado usp_insertar.
'PROCESO DE INSERCION
Dim CMD As New SqlCommand("usp_insertar", cn)
CMD.CommandType = CommandType.StoredProcedure
'PASO DE PARAMETROS
With CMD.Parameters
.Add("@id", SqlDbType.Char, 5).Value = txtcodigo.Text
.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text
.Add("@ape", SqlDbType.VarChar, 50).Value = txtapellido.Text
.Add("@dni", SqlDbType.VarChar, 10).Value = txtdni.Text
.Add("@foto", SqlDbType.Image).Value = DATA
End With
cn.Open()
Try 'EJECUTAR EL PROCESO
Dim i As Integer = CMD.ExecuteNonQuery
MessageBox.Show(i.ToString & " Registro Agregado")
Me.DataGridView1.DataSource = Empleados()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
cn.Close() 'CERRAR LA CONEXION
End Try
9. Programa el evento Click en el botn Actualizar que permita actualizar los datos
de un empleado por su cdigo. Ejecute el procedimiento almacenado usp_modificar.
'PROCESO DE ACTUALIZACION
Dim CMD As New SqlCommand("usp_modificar", cn)
CMD.CommandType = CommandType.StoredProcedure
'PASO DE PARAMETROS
With CMD.Parameters
.Add("@id", SqlDbType.Char, 5).Value = txtcodigo.Text
.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text
.Add("@ape", SqlDbType.VarChar, 50).Value = txtapellido.Text
.Add("@dni", SqlDbType.VarChar, 10).Value = txtdni.Text
.Add("@foto", SqlDbType.Image).Value = DATA
End With
cn.Open()
Try 'EJECUTAR EL PROCESO
Dim i As Integer = CMD.ExecuteNonQuery
MessageBox.Show(i.ToString & " Registro Actualizado")
Me.DataGridView1.DataSource = Empleados()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
cn.Close() 'CERRAR LA CONEXION
End Try
10. Programa el evento Click en el botn Eliminar que permita eliminar un empleado
por su cdigo. Ejecute el procedimiento almacenado usp_eliminar.
'PROCESO DE ELIMINACION
Dim CMD As New SqlCommand("usp_eliminar", cn)
CMD.CommandType = CommandType.StoredProcedure
'PASO DE PARAMETROS
CMD.Parameters.Add("@id",SqlDbType.Char).Value = txtcodigo.Text
cn.Open()
Try 'EJECUTAR EL PROCESO
Dim i As Integer = CMD.ExecuteNonQuery
MessageBox.Show(i.ToString & " Registro Eliminado")
Me.DataGridView1.DataSource = Empleados()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
cn.Close() 'CERRAR LA CONEXION
End Try
With DataGridView1.CurrentRow
txtcodigo.Text = .Cells(0).Value
txtapellido.Text = .Cells(1).Value
txtnombre.Text = .Cells(2).Value
txtdni.Text = .Cells(3).Value
'ALMACENAR LA CELDA DE LA IMAGEN EN UN ARRAY
Dim data() As Byte = .Cells(4).Value
'GUARDAR EL ARRAY DE BYTES EN EL MEMORY
Dim Ms As New MemoryStream
Ms.Write(data, 0, data.Length)
'VISUALIZAR LA IMAGEN EN EL PICTUREBOX
PictureBox1.Image = Image.FromStream(Ms)
End With
LABORATORIO 4.3
ACTUALIZACIN DE DATOS UTILIZANDO UN TABLEADAPTER
En este escenario, vamos a realizar el proceso de actualizacin de los datos de los
vendedores utilizando un TableAdapter. Para ello vamos a crear dos procedures:
INSERT y UPDATE dentro del TableAdapter para efectuar dichos procesos. A
continuacin, desarrolle los siguientes pasos.
3. En la pgina Choose
Command Type seleccione la
opcin create new stored
procedure, presione el botn
Next.
8. En el TableAdapter de vendedor, se
visualiza el mtodo InsertVendedor a
continuacin, Ud., desarrollar el
mtodo UpdateVendedor que
permitir actualizar los datos de los
vendedores por su cdigo.
Mtodo InsertVendedor
Mtodo InsertVendedor
Ven_TableAdapter.Fill(Ds.Vendedor)
Me.DataGridView1.DataSource = Ds.Vendedor
Ven_TableAdapter.InsertVendedor(Me.TXTCODIGO.Text, _
Me.TXTNOMBRE.Text, Me.TXTFONO.Text, Me.TXTDIRECCION.Text)
Ven_TableAdapter.Fill(Ds.Vendedor)
Me.DataGridView1.DataSource = Ds.Vendedor
Dim i As Integer
i = Ven_TableAdapter.UpdateVendedor(Me.TXTNOMBRE.Text, _
Me.TXTFONO.Text, Me.TXTDIRECCION.Text, TXTCODIGO.Text)
Ven_TableAdapter.Fill(Ds.Vendedor)
Me.DataGridView1.DataSource = Ds.Vendedor
LABORATORIO 4.4
USO DE TRANSACCIONES LOCALES
En este escenario realizaremos el proceso de actualizacin de los clientes registrados
en la base de datos BDFactura utilizando transacciones (transacciones explcitas).
1. Ingrese a Visual Studio 2005.
2. Seleccione en el men Files -> New ->Project
3. Elija las siguientes opciones de la ventana para crear un nuevo proyecto.
a. En Project Types elija Visual Basic.
b. En Templates elija WindowsApplication.
c. En name coloque appFacturacion03.
d. En Location coloque C:\CursoPOOII.
10. En el evento Click del botn Limpiar, limpie los controles del Form.
Me.txtcodigo.Text = ""
Me.txtnombre.Text = ""
Me.txtdireccion.Text = ""
Me.txtfono.Text = ""
Me.txtruc.Text = ""
Me.txtcodigo.Focus()
. . .
Catch ex As SqlException
MessageBox.Show(ex.Message)
tr.Rollback()
Finally
cn.Close()
End Try
End Using
LABORATORIO 4.4
TRANSACCIONES DISTRIBUIDAS, TRANSACTIONSCOPE
En este escenario, se aplicar un caso donde se trabajar con dos base de datos:
BDFactura y BDAlmacen. En ellas, se actualizarn los datos sobre dos tablas:
artculos en BDFactura y kardex en BDAlmacen:
Cuando se agregue un nuevo artculo, ste se agregar en el kardex.
Cuando se actualice el stock de artculos, se actualizar el stock en el kardex.
La estructura de las tablas es la siguiente:
DATABASE BDFACTURA
CREATE TABLE ARTICULOS(
art_codigo char(5) primary key,
art_nombre varchar(30),
art_unidad char(4),
art_precio Decimal,
art_stock int)
DATABASE BDALMACEN
CREATE TABLE KARDEX(
kar_codigo char(5) primary key,
har_nombre varchar(30),
kar_unidad char(4),
kar_stock int)
Me.DGArticulos.DataSource = DataArticulos()
cn.Open()
cnk.Open()
Using tr As New TransactionScope(TransactionScopeOption.Required)
Try
Dim cmd As New SqlCommand("Insert Articulos(art_codigo,
art_nombre,art_unidad,art_precio,art_stock)
Values(@cod, @nom, @uni, @pre, @st)", cn)
With cmd.Parameters
.Add("@cod", SqlDbType.Char).Value = txtcodigo.Text
.Add("@nom", SqlDbType.VarChar).Value = txtdescripcion.Text
.Add("@uni", SqlDbType.VarChar).Value = txtunidad.Text
.Add("@pre", SqlDbType.Decimal).Value = Val(txtprecio.Text)
.Add("@st", SqlDbType.Int).Value = Val(txtstock.Text)
End With
......
......
cmd.ExecuteNonQuery()
cmd = New SqlCommand("Insert Kardex(kar_codigo,har_nombre,
kar_unidad,kar_stock) Values(@cod, @nom, @uni,@st)", cnk)
With cmd.Parameters
.Add("@cod", SqlDbType.Char).Value = txtcodigo.Text
.Add("@nom", SqlDbType.VarChar).Value = txtdescripcion.Text
.Add("@uni", SqlDbType.VarChar).Value = txtunidad.Text
.Add("@st", SqlDbType.Int).Value = Val(txtstock.Text)
End With
cmd.ExecuteNonQuery()
tr.Complete()
MessageBox.Show("Articulo Agregado")
Me.DGArticulos.DataSource = DataArticulos()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
cn.Close() : cnk.Close()
End Try
End Using
tr.Complete()
Me.DGArticulos.DataSource = DataArticulos()
Catch ex As SqlException
MessageBox.Show(ex.Message)
Finally
cn.Close()
cnk.Close()
End Try
End Using
Autoevaluacin
1. Cul es la diferencia entre una transaccin local y una transaccin distribuida?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
______________________________________________
Resumen
Las transacciones locales son tiles para las aplicaciones que desean utilizar la
misma transaccin en varias llamadas a funciones o a subprocesos. Tiene que
llamar de forma especfica a los mtodos Commit y RollBack para confirmar o
anular la transaccin.
o BEGIN TRANSACTION
o COMMIT TRANSACTION
o ROLLBACK TRANSACTION
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://msdn2.microsoft.com/es-es/library/z80z94hz(VS.80).aspx
Pgina que referencia el manejo de transacciones
http://msdn2.microsoft.com/es-es/library/ms172152(VS.80).aspx
Pgina que maneja la implementacin de transacciones
UNIDAD DE
APRENDIZAJE
2
SEMANA
Al trmino de la unidad, los alumnos elaboran aplicaciones Windows .NET que accedan a
un origen de datos en forma desconectada utilizando los objetos del ADO.NET para
obtener una mejor performance en los procesos de consulta y actualizacin de una
aplicacin.
TEMARIO
ACTIVIDADES PROPUESTAS
2 DATASET
Opcin Descripcin
2.6.1 ForeignKeyConstraint
Las propiedades DeleteRule y UpdateRule definen la accin a ser
tomada cuando el usuario actualiza o elimina una fila en la tabla
relacionada. Si una fila de la tabla principal es eliminada, tambin se
borrarn los registros de la tabla hija que tienen el mismo valor.
A continuacin, se muestra las reglas para las propiedades de
UpdateRule y DeleteRule.
Rule Descripcin
dataSet.Tables("Factura").Constraints.Add(FKCliFact)
2.6.2 UniqueConstraint
El objeto UniqueConstraint aplica la unicidad de los valores de las filas
de una tabla para una columna o un array de columnas. Se puede crear
un UniqueConstraint para una columna o array de columnas.
El objeto UniqueConstraint es agregado a la coleccin Constraint de
la tabla a travs del mtodo Add.
Podemos crear una constraint de tipo Unique asignando la propiedad
Unique a true.
3 DATAADAPTER
Propiedades Descripcin
Si el mtodo Fill encuentra un valor de clave principal para una fila del DataSet
que coincide con un valor de clave principal de una fila de los resultados
devueltos por SelectCommand, ste actualiza la fila existente con la
informacin de la fila devuelta por SelectCommand y establece el RowState
de la fila existente en Unchanged. Si una fila devuelta por SelectCommand
tiene un valor de clave principal que no coincide con ninguno de los valores de
clave principal de las filas del DataSet, el mtodo Fill agrega una nueva fila con
un RowState de Unchanged.
With da.UpdateCommand.Parameters
.Add("@nom", SqlDbType.VarChar, 30, "art_nombre")
.Add("@pre", SqlDbType.Decimal, 10, "art_precio")
.Add("@st", SqlDbType.Int, 10, "art_stock")
Dim par As SqlParameter = .Add("@cod", SqlDbType.Char)
par.SourceColumn = "art_codigo"
par.SourceVersion = DataRowVersion.Original
End With
Estado Descripcin
Versin Descripcin
If dt.HasErrors Then
Dim str As String = ""
For Each row As DataRow In dt.GetErrors
str = str + row.RowError + vbCrLf
Next
MessageBox.Show(str)
dt.RejectChanges()
End If
dt.AcceptChanges()
LABORATORIO 5.1
CONSULTA DE DATOS RELACIONALES
En el ejemplo siguiente se muestra la consulta entre dos tablas: tb_clientes y
tb_pedidoscabe, donde al seleccionar un cliente en un control ListBox, visualice los
pedidos del cliente seleccionado.
1. Ingrese a Visual Studio 2005
2. Seleccione File->New->Project
3. Elija las siguientes opciones:
- En Proyect Types elija Visual Basic
- En Templates elija WindowsApplication
- En Name coloque appFacturacion4
- En Location coloque C:\CursoPOOII
4. Diseo del Formulario:
LABORATORIO 5.2
ACTUALIZACIN DE DATOS, UTILIZANDO EL DATAADAPTER
En este escenario, se implementara un formulario para realizar el mantenimiento de
los vendedores de la base de datos DVentas.
da.Fill(t)
Return t
End Function
Me.DGVendedor.DataSource = DataVendedor()
With DGVendedor.CurrentRow
txtcodigo.Text = .Cells(0).Value
txtnombre.Text = .Cells(1).Value
txtfono.Text = .Cells(2).Value
txtdireccion.Text = .Cells(3).Value
End With
da.Update(dt)
Me.DGVendedor.DataSource = dt
LABORATORIO 5.3
ACTUALIZACIN DE DATOS, UTILIZANDO EL DATASET
En este escenario, se implementar un formulario para realizar el mantenimiento de
los artculos de la base de datos BDFactura.
1. Agregue un formulario al proyecto y diselo.
6. En el evento click del botn buscar, ubique un registro por su cdigo, si lo ubica
llenar los TextBox.
9. Pinte el botn Actualizar Datos, el cual actualizar los datos del DataTable,
donde evala, primero, si no tiene errores actualizar los cambios utilizando el
mtodo AcceptChanges, caso contrario, visualiza los errores y deshace la
operacin a travs del mtodo RejectChanges.
Autoevaluacin
Resumen
El DataView es una vista de datos de una tabla, la cual puede realizar operaciones
de ordenamiento y filtro, independiente de la tabla de origen.
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://msdn2.microsoft.com/es-es/library/zb0sdh0b(VS.80).aspx
Pgina que explica la estructura del DataSet de ADO.NET
UNIDAD DE
APRENDIZAJE
2
SEMANA
Al trmino de la unidad, los alumnos elaboran aplicaciones Windows .NET que accedan a
un origen de datos en forma desconectada utilizando los objetos del ADO.NET para
obtener una mejor performance en los procesos de consulta y actualizacin de una
aplicacin.
TEMARIO
ACTIVIDADES PROPUESTAS
1. DATAVIEW
Una DataView proporciona una vista de datos dinmica en la DataTable
subyacente: el contenido, el orden y la pertenencia reflejan los cambios en
cuanto se producen. Este comportamiento difiere del mtodo Select de la
DataTable, que devuelve una matriz de DataRow de una tabla basada en un
filtro o un orden determinados: este contenido refleja cambios en la tabla
subyacente, pero la pertenencia y la ordenacin siguen siendo estticas.
custView.AllowDelete = False
2. DATATABLEREADER
La clase DataTableReader obtiene el contenido de uno o varios objetos
DataTable con el formato de uno o varios conjuntos de resultados de solo
lectura y con desplazamiento slo hacia delante.
LABORATORIO 6.1
CONSULTA DE DATOS UTILIZANDO UN DATAVIEW
En el ejemplo siguiente se muestra la consulta de los productos registrados en la
base de datos por su descripcin. Para este caso, ingrese la descripcin del producto
desde un TextBox, donde filtrar los registros por su descripcin.
7. En el click del botn Consulta, donde mostramos los productos por su nombre:
a. Ingresa la descripcin del producto en el control TextBox.
b. Asigne al mtodo RowFilter la expresin de comparacin.
c. Mostrar el resultado del filtro en el control DataGridView DGArticulos.
dv.RowFilter = _
"nombreproducto LIKE '" + txtdescripcion.Text + "%'"
Me.DSArticulos.DataSource = dv
LABORATORIO 6.2
CONSULTA DE DATOS RELACIONALES UTILIZANDO
DATAVIEW
En el ejemplo siguiente se muestra la consulta de los pedidos por un empleado
determinado, donde al seleccionar un empleado en un ComboBox, visualice los
pedidos del empleado seleccionado.
1. Ingrese a Visual Studio 2005.
2. Seleccione File->New->Project.
3. Agregue un Formulario en el proyecto appConsulta.
4. Disea el Formulario:
LABORATORIO 6.3
ACTUALIZACION DE DATOS UTILIZANDO DATAVIEW
En el ejemplo siguiente desarrollamos una interfaz que permita actualizar los datos de
los clientes utilizando un DataView. En este proceso el DataView estar asociado aun
DataTable para realizar, el DataView, los procesos de Agregar, Modificar y Eliminar
registros de Clientes sobre el DataTable.
1. En el Proyecto AppConsulta, agregue un Formulario.
2. Disea el Formulario:
LABORATORIO 6.4
LISTADO DE PRODUCTOS UTILIZANDO DATATABLEREADER
En el ejemplo siguiente desarrollamos una interfaz que permita listar los productos en
un control ListView, utilizando un objeto DataTableReader.
1. En el Proyecto AppConsulta, agregue un Formulario.
2. Disea el Formulario:
Autoevaluacin
4. Cules son los mtodos para modificar los datos a travs del DataView?
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Resumen
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://msdn.microsoft.com/es-
es/library/system.data.datatablereader.hasrows(VS.80).aspx
Pgina referente al uso del mtodo HasRows del datatableReader
http://msdn.microsoft.com/es-
es/library/system.data.datatablereader.getvalues(VS.80).aspx
Pgina referente al uso de los metodos Get del datatableReader
http://msdn.microsoft.com/es-es/library/system.data.dataview(VS.80).aspx
Pgina referente a la clase DataView
UNIDAD DE
APRENDIZAJE
3
SEMANA
MANEJO DE REPORTES
TEMARIO
ACTIVIDADES PROPUESTAS
1 CRYSTAL REPORT
En Visual Studio .NET, se puede crear un nuevo informe Crystal o agregar uno
existente a un proyecto. Puede guardar el informe en un equipo local o publicarlo
como servicio Web en un servidor Web. En funcin de si va a desarrollar una
aplicacin de Windows o una aplicacin Web, deber enlazar primero el informe
con Windows Forms Viewer o con Web Forms Viewer y, a continuacin, crear la
aplicacin. Los usuarios pueden ejecutar la aplicacin para Windows en una
plataforma de Windows o implementar la aplicacin Web en un servidor Web y
ver el informe Crystal en un explorador Web.
3 DISEO DE INFORMES
Los informes se crean en el Diseador de Crystal Report. El Diseador de
Crystal Report se inicia automticamente al aadir un objeto de Crystal Reports
al proyecto o al hacer doble clic en un objeto de Crystal Reports existente en el
proyecto.
3.3.3 Detalles
Los objetos colocados en la seccin Detalles se imprimen con cada
registro nuevo.
Esta seccin contiene los datos del cuerpo del informe. Aqu aparece la
mayor parte de los datos de ste. Cuando se ejecuta el informe, la
seccin Detalles se vuelve a imprimir para cada registro. Por ejemplo, si
aade un objeto de base de datos con 100 registros a la seccin
Detalles, el informe imprimir 100 secciones de detalle individuales en
tiempo de ejecucin.
Esta seccin se utiliza para incluir la informacin que desea que slo
aparezca una vez al final del informe, como los totales generales.
5 IMPLEMENTACION DE INFORMES
Crystal Reports 10 funciona en una arquitectura de uno, dos o tres niveles tanto
en plataformas Windows Forms como Web Forms.
Nota: En estos casos, los niveles se definen en funcin de donde residan los
componentes o la arquitectura de Crystal Reports. El tipo de base de datos
que utiliza el informe tambin puede aadir un nivel adicional.
Los componentes de los informes, incluidos el archivo del informe (archivo .rpt)
y el motor de informes, se instalan con el archivo ejecutable en el equipo del
usuario.
Escalabilidad
Las aplicaciones de Windows con informes locales son las ms adecuadas
para una implementacin a pequea escala, ya que la aplicacin se instala en
el equipo del usuario. Si depende mucho del proceso del cliente, no dude en
optar por esta opcin.
Si hay que realizar cambios en el informe, se debe volver a instalar la
aplicacin en el equipo del usuario.
Escalabilidad
Los usuarios slo necesitan tener un explorador en el equipo. Todos los
componentes de informes residen en el servidor y se pueden actualizar de
forma centralizada.
Escalabilidad
Dependiendo del tipo de aplicacin, los usuarios slo necesitan un Visor de
Windows Forms o un explorador Web para ver los servicios Web de informes.
El resto de los componentes de los informes reside con el servicio Web de
informes en un servidor remoto. Los cambios realizados en el servicio Web de
informes se reflejan de forma inmediata en la aplicacin.
LABORATORIO 9.1
MANEJO DE REPORTE SIMPLE CON CRYSTAL REPORT
En el ejemplo siguiente se muestra el listado de los pedidos registrados (tabla
tb_pedidoscabe) en la base de datos utilizando el Crystal Report.
TableAdapter
tb_pedidoscabe
Selecciona el elemento
Crystal Report
Asigna un nombre al
elemento: RptReportes
Presiona el botn
Aceptar contrato, para
continuar con el
proceso de diseo.
7. A continuacin se visualiza la
Galeria de Crystal Report para el
diseo de un Reporte. Selecciona la
opcin Usar asistente de informes
y el tipo de asistente es Estndar,
presione el botn Aceptar.
8. El asistente muestra la
ventana DATOS que
permite seleccionar
desde un origen de
datos: ADO.NET
DataSets el
tableAdapter
tb_pedidoscabe.
Agregarlo a las Tablas
Seleccionada y presione
TableAdapter
el botn Siguiente>
tb_pedidoscabe
9. En la ventana
Campos, debe
seleccionar las reas
que conforma el
reporte, tal como se
muestra en la figura.
Para terminar
presione el botn
Finalizar.
Campos que se
visualizan en el
reporte.
Seccin
encabezado
de pgina.
Seccin
Detalles: los
campos.
Seccin pie
de pgina.
Defina la instancia
ds de DataSet1 y el
tableAdapter de
pedidos para poblar
los registros al
DataSet1 ds.
Defina la instancia rp
de RptReportes y
asignar como origen
de datos al DataSet1
ds.
Defina la propiedad
ReportSource del
control a rp.
LABORATORIO 6.2
MANEJO DE REPORTE CON PARAMETROS CON CRYSTAL
REPORT
En el ejemplo siguiente se muestra el reporte de los pedidos al seleccionar un Cliente
desde un ComboBox. Utilice el TableAdapter para implementar el origen de datos.
1. Defina en el TableAdapter
tb_pedidoscabe un mtodo
que liste los pedidos por un
cliente especfico.
Agregue en el
TableAdapter
tb_pedidoscabe el
metodo que consulte los
pedidos por cliente.
3. Asigna el nombre
al mtodo:
FillByCliente
4. Disea el
formulario:
Control
ComboBox1
para listar los
clientes.
Control
CrystalReport
Viewer para
mostrar el
reporte.
Conexin a la
base de datos.
Recuperar los
clientes en el
dataTable.
Configura el
combobox1 con
los clientes.
6. Codifica el botn Reporte para listar el reporte de pedidos por cliente seleccionado
en el control ComboBox1.
Defina la
instancia ds de
DataSet1 y el
tableAdapter de
pedidos para
poblar los
pedidos por
cliente al
DataSet1 ds.
Defina la
instancia rp de
RptReportes y
asignar como
origen de datos
al DataSet1 ds.
Autoevaluacin
Resumen
En Visual Studio .NET, se puede crear un nuevo informe Crystal o agregar uno
existente a un proyecto. Puede guardar el informe en un equipo local o publicarlo
como servicio Web en un servidor Web.
Una aplicacin de dos niveles o Web, alberga un informe local (archivo .rpt), el
procesamiento se basa en una relacin de dos niveles en la que el servidor Web
gestiona los eventos que tienen lugar en el cliente.
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://www.willydev.net/CrystalDesde0
Pgina que permite crear un reporte desde cero
http://rs10.rapidshare.com/files/20840690/Manual_de_Crystal_Reports.rar
Permite descargar el manual del Crystal Report
www.mygnet.net/manuales/crystalreport//manual_completo_crystal_repor
t10.945
Pgina que permite descargar el manual del Crystal Report
UNIDAD DE
APRENDIZAJE
4
SEMANA
10
Al trmino de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relacin
apoyndonos en un entorno visual integrado con Visual Studio, y realizar consultas a travs
del nuevo lenguaje de consultas integrado.
TEMARIO
ACTIVIDADES PROPUESTAS
Datos en todas las capas. Una plataforma de datos completa ofrece gestin
de datos y acceso a servicios de datos en cualquier lugar.
Datos de todos los tipos. La visin de acceso a datos de Microsoft concibe un
almacn integrado capaz de almacenar y gestionar datos de todos esos tipos,
garantizar su seguridad, permitir bsquedas y consultas sobre ellos,
analizarlos, consultarlos, sincronizarlos, etc.
Acceso a datos uniforme. Aunque las aplicaciones en diferentes capas
requieren diferentes clases de gestin de los servicios de datos, todas esperan
(requieren) una uniformidad significativa en lo relativo al entorno de desarrollo
de aplicaciones (modelos de programacin y herramientas).
Visin completa del negocio. Gira alrededor de la tecnologa que puede
permitir a nuestros clientes recoger, limpiar, almacenar y preparar sus datos de
negocio para el proceso de toma de decisiones. Gira tambin alrededor de las
experiencias que los Usuarios del Negocio y los Trabajadores de la Informacin
tendrn al acceder, analizar, visualizar y generar informes a partir de los datos
mientras recopilan la informacin necesaria para sus decisiones.
Servicios de datos en todos los sitios. Las aplicaciones invierten un
esfuerzo significativo en el desarrollo de servicios como la seguridad de datos,
la sincronizacin, la seriacin para el intercambio de datos (o para servicios
Web), anlisis y generacin de informes a partir de los datos en todas las
capas, sobre abstracciones que sean cercanas a la perspectiva de las
aplicaciones.
3 LINQ to SQL
LINQ To SQL es el componente especfico de LINQ que proporciona la
infraestructura de runtime necesaria para utilizar datos relacionales como objetos y
poder definir consultas sobre dichos objetos, es decir, habilita la consulta de
contenedores de datos relacionales sin tener que abandonar la sintaxis o el
entorno de tiempo de compilacin. Para hacer posible esto, LINQ To SQL se
apoya en las siguientes caractersticas clave:
Las innovaciones del lenguaje (C# 3.0 y VB 9.0), as como en las
caractersticas propias de LINQ (consultas integradas en el lenguaje).
Mapping del esquema de la BD en clases, propiedades, mtodos, etc. La
correspondencia que LINQ To SQL hace entre los elementos de un esquema
de una BD y los elementos correspondientes a nivel del CLR es el siguiente:
3.1.2 CLASE ENTIDAD (ENTITY CLASS) LINQ to SQL nos permite modelar
clases que mapeen una base de datos. Estas clases son tpicamente
conocidas como Clases Entidad y a las instancias se las conoce como
Entidades. Las clases entidad mapean a tablas de una base de datos.
Las propiedades de una clase entidad normalmente mapean las
columnas de la tabla. Cada instancia de una clase entidad representa a
una fila de una tabla de la base de datos.
Las clases entidad definidas por LINQ to SQL no tienen que derivar de
una clase base especfica, lo que significa que pueden heredar de
cualquier objeto que queramos. Todas las clases creadas por el
diseador de LINQ to SQL se definen como clases parciales con lo que
podemos, opcionalmente, aadir propiedades adicionales, mtodos y
eventos.
Una de las cosas que nos aporta LINQ to SQL es que nos da una total
flexibilidad en cmo consultar nuestros datos, y podemos aprovecharnos de
las asociaciones que hicimos cuando modelamos las clases de LINQ to SQL
para hacer consultas ms naturales y ricas sobre la base de datos.
Despus de realizar los cambios que queramos a los objetos que hemos
obtenido con LINQ to SQL, podemos llamar al mtodo SubmitChanges()
de nuestro DataContext para guardar los cambios en nuestra base de datos.
Con esto, LINQ to SQL, creara y ejecutar las sentencias SQL apropiadas
para actualizar la base de datos.
Mtodos:
Procedimientos
almacenados
LABORATORIO 10.1
CONSULTA DE PEDIDOS POR CLIENTE Y AO
En este escenario vamos a listar los pedidos por un cliente y ao, el cual seleccione un
cliente desde un ComboBox e ingrese el ao desde el control TextBox y al presionar el
botn Consulta visualice los pedidos por cliente seleccionado y ao ingresado.
1. Ingrese a Visual Studio 2005.
2. Seleccione File->New->Project.
3. Elija las siguientes opciones:
- En Proyect Types elija Visual Basic.
- En Templates elija Windows Application.
- En Name coloque appLINQ.
- En Location coloque C:\CursoPOOII.
4. Agregue un nuevo elemento en el proyecto de Windows; seleccione la plantilla
Clases de LINQ to SQL; asigne el nombre DataVentas.dbml.
Seleccione la plantilla
para el manejo de las
tablas como clases.
5. Desde el explorador de
servidor arrastre las
tablas hacia el
diseador llamado
DataVentas.dbml y
establecer la
asociacin entre las
tablas tb_clientes y
tb_pedidoscabe, tal
como se muestra.
8. En el evento Load del Formulario, defina una variable clientes que almacene
los registros de la tabla tb_clientes para enlazar al control ComboBox1.
Me.ComboBox1.DataSource = cliente
Me.ComboBox1.DisplayMember = "NombreCia"
Me.ComboBox1.ValueMember = "IdCliente"
Me.DataGridView1.DataSource = pedidos
LABORATORIO 10.2
CONSULTA DE PEDIDOS POR EMPLEADOS ENTRE FECHAS
En este escenario vamos a listar los pedidos por un empleado entre dos fechas, donde
al seleccionar un empleado desde un ComboBox e ingrese dos fechas desde controles
TextBoxes y al presionar el botn Consulta visualice los pedidos por empleado
seleccionado y entre dos fechas.
LABORATORIO 10.3
ACTUALIZACION DE CLIENTES UTILIZANDO LINQ to SQL
En este escenario vamos a actualizar los clientes utilizando LINQ to SQL; para esto
vamos a programar las operaciones de Agregar un clientes, modificar los datos de un
cliente y eliminar un registro de cliente por su cdigo utilizando el modelo de objetos
LINQ to SQL.
1. En el DataContext
DataVentas agregue
la tabla tb_paises y
establezca la
asociacin en la tabla
tb_clientes.
Sub Clientes()
Dim clientes = From cliente In Data.tb_clientes
Me.DataGridView1.DataSource = clientes
End Sub
6. Codifique el evento Click del botn Agregar para insertar un registro a la tabla
tb_clientes y actualizando a la base de datos.
'instancia de la clase tb_clientes
Dim cliente As New tb_clientes
cliente.IdCliente = TXTCODIGO.Text
cliente.NombreCia = TXTNOMBRE.Text
cliente.Direccion = TXTDIRECCION.Text
cliente.idpais = ComboBox1.SelectedValue
cliente.Telefono = TXTFONO.Text
'agrega el cliente a la clase y actualiza a la base de datos
Data.tb_clientes.InsertOnSubmit(cliente)
Data.SubmitChanges()
'listar los clientes
Clientes()
7. Codifique el evento Click del botn Modificar, para actualizar los datos de un
cliente seleccionado y actualizando a la base de datos.
8. Codifique el evento Click del botn Eliminar para eliminar un cliente por su
cdigo y actualizando la base de datos.
Dim cliente = From cli In Data.tb_clientes _
Where cli.IdCliente = TXTCODIGO.Text Select cli
If cliente.Count = 1 Then
'eliminar el primero objeto de los clientes
Data.tb_clientes.DeleteOnSubmit(cliente.First)
Data.SubmitChanges()
'listar loc clientes
Clientes()
End If
LABORATORIO 10.4
CONSULTA DE PEDIDOS ENTRE FECHAS CON
PROCEDIMIENTOS ALMACENADOS Y LINQ to SQL
En este escenario vamos ejecutar un procedimiento almacenado donde liste los
pedidos entre fechas. Para ello, definimos el procedimiento almacenado y agregamos
el procedimiento como mtodo al DataContext.
Procedimiento
almacenado
usp_pedidos_Fecha
agregado como mtodo.
Autoevaluacin
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
Resumen
El diseador de LINQ to SQL nos aporta una forma fcil de modelar y visualizar
una base de datos como un modelo de objeto de LINQ to SQL: DataContext y las
Clases Entitities.
Las clases entidad mapean a tablas de una base de datos. Las propiedades de
una clase entidad normalmente mapean las columnas de la tabla. Cada instancia
de una clase entidad representa a una fila de una tabla de la base de datos.
http://msguayaquil.com/blogs/julioc/archive/2007/07/27/la-evoluci-243-n-
de-las-apis-de-acceso-a-datos-de-microsoft-parte-ii.aspx
Pgina referente a la evolucin de APIs: LINQ
http://thinkingindotnet.wordpress.com/2007/07/13/linq-to-sql-4%c2%aa-
parte-actualizando-la-base-de-datos/
Pgina referente a la actualizacin de datos utilizando LINQ to SQL
http://thinkingindotnet.wordpress.com/2007/08/17/linq-to-sql-parte-6-
obtener-datos-con-procedimientos-almacenados/
Pgina referente al manejo de procedimientos almacenado en LINQ to
SQL
UNIDAD DE
APRENDIZAJE
4
SEMANA
11
Al trmino de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relacin
apoyndonos en un entorno visual integrado con Visual Studio, y realizar consultas a travs
del nuevo lenguaje de consultas integrado.
TEMARIO
ACTIVIDADES PROPUESTAS
Los alumnos conocen las plataformas a acceso a datos del ADO.NET Entity
FrameWork.
El Entity Framework nos permite trabajar con los objetos definidos a partir del
modelo de datos sin tener que preocuparnos de la capa de acceso a datos ya que
l se encarga automticamente de su persistencia.
Entity Framework proporciona los medios para definir estas capas mediante los
archivos XML. Esto proporciona un nivel de abstraccin que permite a los
desarrolladores programar para el modelo conceptual en lugar del modelo
relacional.
Selecciona la
plantilla ADO.NET
Entity Data Model.
Conexin a la
base de datos del
app.config.
Nombre de la
conexin de
entidad a
almacenar en el
app.config.
Seleccione
las tablas o
procedures
de la base
de datos.
Modelo de
Entidades de
datos: EDM
Entidades
almacenadas en
el modelo EDM
<connectionStrings>
<add name="DBVentasEntities"
connectionString="metadata=res://*/ModelVentas.csdl|res://*/Mo
delVentas.ssdl|res://*/ModelVentas.msl;provider=System.Data.Sq
lClient;provider connection string="Data Source=.;Initial
Catalog=DBVentas;Integrated
Security=True;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
3.3.3 Entity SQL con LINQ.- La versin de ADO.NET 3.5 incluye una
capa que permite exponer los datos de la base de datos como
objetos .NET, permitiendo a los desarrolladores formular consultas
contra una base de datos directamente desde el lenguaje de
programacin utilizado para crear la lgica de negocio. Esta
capacidad se conoce como LINQ to Entities.
Using entidades As New DBVentasEntities
Dim query = From c In entidades.tb_clientes _
Where c.NombreCia Like "M%" Select c
For Each c As tb_clientes In query
ComboBox1.Items.Add(c.NombreCia)
Next
End Using
Clase Descripcin
EntityCommand Comando que ejecuta una sentencia hacia el
modelo de entidad de datos.
EntityConnection Contiene la referencia al EMD y la conexion al
origen de datos.
EntityConnectionStringBuilder Maneja y crea la cadena de conexion utilizada
por EntityClient.
EntityDataReader Leer los registros del origen de datos.
EntityParameter Parmetro de un EntityCommand.
EntityProviderFactory Representa un conjunto de mtodos para crear
o implementer las clases del origen de datos.
EntityTransaction Transaccin para un EntityCommand.
Imports System.Data.EntityClient
. . .
Dim cn As New EntityConnection("Name=DBVentasEntities")
EntityCommand Descripcin
ExecuteScalar Ejecuta una consulta que retorna un valor.
ExecuteReader Ejecuta una consulta que retorna un conjunto de
datos a un DataReader.
ExecuteNonQuery Ejecuta una Sentencia para actualizar los datos.
LABORATORIO 11.1
CONSULTA DE DATOS UTILIZANDO ENTITY PROVIDER
En este escenario vamos a desarrollar un aplicativo el cual permita listar los clientes
que se encuentra administrado en el modelo de entidad de datos (EDM).
A continuacin sigua los siguientes pasos para realizar este proceso.
Selecciona la
plantilla ADO.NET
Entity Data Model
6. Especifica la cadena de
conexin a la BD y
FINALIZAR.
Conexin a la
base de datos del
app.config
Nombre de la
conexin de
entidad a
almacenar en el
app.config
Control ListView
LABORATORIO 11.2
CONSULTA DE PEDIDOS ENTRE DOS FECHAS
En este escenario vamos a consultar los pedidos entre dos fechas. Al seleccionar las
fechas en los controles ComboBox, listar los pedidos entre las fechas seleccionadas.
1. Agregue un formulario al proyecto, disee el formulario tal como se muestra.
5. Defina, en el evento Click del botn Consulta, el proceso para listar los pedidos
entre dos fechas seleccionadas por ComboBoxes.
Me.ListView1.Items.Clear()
cn.Close()
. . .
While dr.Read
Dim it As New ListViewItem(dr("IdPedido").ToString)
it.SubItems.Add(dr("IdCliente"))
it.SubItems.Add(dr("FechaPedido"))
it.SubItems.Add(dr("FechaEntrega"))
Me.ListView1.Items.Add(it)
End While
dr.Close()
cn.Close()
6. Grabe el proyecto y ejecute la aplicacin.
LABORATORIO 11.3
ACTUALIZACION DE CLIENTES
En este escenario vamos a actualizar los datos de los clientes utilizando los objetos
del Modelo de Entidad de Datos DBVentasEntities.
1. Agregue un formulario al proyecto, disee el formulario tal como se muestra.
Me.DataGridView1.DataSource = DB.tb_clientes.ToList
Autoevaluacin
Resumen
Las tres tcnicas principales que puede usar para interactuar con un EDM:
Escritura de consultas de Entity SQL con el proveedor EntityClient
Escritura de consultas de Entity SQL con Servicios de objeto
Escritura de consultas de Entity con LINQ.
La versin de ADO.NET 3.5 incluye una capa que permite exponer los datos de la
base de datos como objetos .NET, permitiendo a los desarrolladores formular
consultas contra una base de datos directamente desde el lenguaje de
programacin utilizado para crear la lgica de negocio. Esta capacidad se conoce
como LINQ to Entities.
Si desea conocer mas acerca del tema, visite las siguientes paginas:
http://msdn.microsoft.com/es-ar/library/bb738679(en-us).aspx
Pgina referente al marco de los objetos de entidad
http://msdn.microsoft.com/es-ar/library/system.data.entityclient(en-
us).aspx
Pgina referente al ADO.NET Entity Provider
http://msdn.microsoft.com/es-es/magazine/cc507640.aspx
Pgina referente al modelo de Entidad
UNIDAD DE
APRENDIZAJE
4
SEMANA
12
Al trmino de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relacin
apoyndonos en un entorno visual integrado con Visual Studio, y realizar consultas a travs
del nuevo lenguaje de consultas integrado.
TEMARIO
ACTIVIDADES PROPUESTAS
Los Servicios de Objeto son puestos en prctica por clases en el Sistema. Data.
Objects y Sistema. Data. Objects. DataClasses.
Los Object Services realizar cambios a los objetos que son adjuntados al
ObjectContext utilizando una instancia del IEntityChangeTracker.
Las consultas retornan objetos en el estado Unchanged. El Modelo de
entidad de datos ejecuta mtodos para realizar los cambios asignando a
cada propiedad de la entidad.
Try
'realizar los cambios, el cual puede causar conflicto
Dim n As Integer = context.SaveChanges()
Messagebox.Show("Registros Actualizados:" & n)
Catch ex As OptimisticConcurrencyException
'en caso existe conflict, refrescar los cambios los
'objetos antes del cambios.
context.Refresh(RefreshMode.ClientWins, orders)
'salvar los cambios.
context.SaveChanges()
Messagebox.Show(" Se ha desencanado un
OptimisticConcurrencyException, se grab los cambios")
End Try
Para enlazar objetos a los controles Windows Form control, asignar la propiedad
DataSource del control al EntityCollection o al ObjectResult que es retornado
cuando se ejecute el mtodo Execute de un objeto ObjectQuery object.
LABORATORIO 12.1
CONSULTA DE DATOS UTILIZANDO ENTITY PROVIDER
En este escenario vamos a desarrollar un aplicativo el cual permita filtrar todos los
productos por su nombre; donde al ingresar los primeros caracteres del nombre del
producto, visualice los productos que se encuentra administrado en el modelo de
entidad de datos (EDM).
A continuacin sigua los siguientes pasos para realizar este proceso.
Selecciona la
plantilla ADO.NET
Entity Data Model.
Selecciona
Generar desde
la base de datos
para trabajar una
base de datos.
5. Especifica la cadena de
conexin a la BD y
FINALIZAR.
Conexin a la
base de datos del
app.config.
Nombre de la
conexin de
entidad a
almacenar en el
app.config.
'listar
Me.DataGridView1.DataSource = lista.ToList
LABORATORIO 12.2
CONSULTA DE PEDIDOS ENTRE DOS FECHAS
En este escenario vamos a consultar los pedidos entre dos fechas. Al seleccionar las
fechas en los controles ComboBox, listar los pedidos entre las fechas seleccionadas.
1. Agregue un formulario al proyecto, disee el formulario tal como se muestra.
5. Defina, en el evento Click del botn Consulta, el proceso para listar los pedidos
entre dos fechas seleccionadas por ComboBoxes.
'listar
Me.DataGridView1.DataSource = lista.ToList
LABORATORIO 12.3
ACTUALIZACION DE CLIENTES
En este escenario vamos a actualizar los datos de los clientes utilizando los objetos
del Modelo de Entidad de Datos DBVentasEntities.
DB.DeleteObject(cliente)
DB.SaveChanges()
Me.DataGridView1.DataSource = DB.tb_clientes.ToList
Me.txtcodigo.Text = DataGridView1.CurrentRow.Cells(0).Value
Me.txtnombre.Text = DataGridView1.CurrentRow.Cells(1).Value
Me.txtdireccion.Text = DataGridView1.CurrentRow.Cells(2).Value
Me.txtfono.Text = DataGridView1.CurrentRow.Cells(4).Value
ComboBox1.SelectedValue=DataGridView1.CurrentRow.Cells(3).Value
Autoevaluacin
1. Qu es el Servicio de objetos?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________
2. Qu es el Object Context?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________
Resumen
Cuando quieres agregar data en el origen de datos, debes crear una instancia del
tipo de la Entidad y aadir el objeto al ObjectContext. Antes de agregar un nuevo
objeto, debes asignar, primero, a todas las propiedades que no soporten valores
null.
Los Object Services realizar cambios a los objetos que son adjuntados al
ObjectContext utilizando una instancia del IEntityChangeTracker.
Las consultas retornan objetos en el estado Unchanged. El Modelo de entidad de
datos ejecuta mtodos para realizar los cambios asignando a cada propiedad de
la entidad para crear la lgica de negocio. Esta capacidad se conoce como LINQ
to Entities.
Si desea conocer mas acerca del tema, visite las siguientes paginas:
http://msdn.microsoft.com/es-ar/library/bb738470(en-us).aspx
Pgina referente a las actualizaciones de los servicios de objetos
http://geeks.ms/blogs/ciin/archive/2008/01/25/ado-net-entity-framework-
linq-to-entities-entity-sql-y-entity-services-i.aspx
Pgina referente al los servicios de objetos y entidades
http://msdn.microsoft.com/es-es/magazine/cc507640.aspx
Pgina referente al modelo de Entidad
UNIDAD DE
APRENDIZAJE
5
SEMANA
13
TEMARIO
ACTIVIDADES PROPUESTAS
1 XML
El lenguaje de marcado extensible (XML) es un lenguaje que proporciona un formato
para describir datos. Con ello se facilita la realizacin de declaraciones de contenido
ms precisas y la obtencin de resultados de bsqueda ms significativos en varias
plataformas. Adems, XML permite la separacin de la presentacin de datos.
Opcin Descripcin
Escribe el contenido del DataSet como datos XML sin un
IgnoreSchema
esquema XML.
Tipo Descripcin
Modo Descripcin
Valor predeterminado. Examina el cdigo XML y elige la opcin mas
apropiada en el orden:
Auto 1. Si el codigo XML es DiffGram, utiliza DiffGram.
2. Si el DataSet contiene un esquema XML, utiliza ReadSchema.
3. Si el DataSet no contiene esquema, utiliza InferSchema.
Si el DataSet ya contiene esquema, se agregan nuevas tablas del
ReadSchema esquema en lnea al esquema existente en el DataSet. Si el DataSet
no contiene esquema de una tabla, no se leer ningn dato.
Pasa por alto cualquier esquema en lnea y carga los datos en el
IgnoreSchema
esquema del DataSet existente.
Pasa por alto cualquier esquema en lnea, deduce el esquema por
InferShema
la estructura de datos XML y carga los datos.
Lee un DiffGram y agrega los datos al esquema actual. DiffGram
DiffGram combina las filas nuevas con las filas existentes en las que
coinciden los valores de identificador.
Sigue leyendo varios fragmentos de XML hasta llegar al final de la
Fragment
secuencia.
Imports System.IO
Dim xmlStream As New StreamReader("C:\distritos.xsd")
Dim ds As New DataSet
dataSet.ReadXmlSchema(xmlStream)
xmlStream.Close()
3.2.2 InferXmlSchema
Tambin, puede indicar al DataSet que deduzca su esquema a partir de un
documento XML mediante el mtodo InferXmlSchema del DataSet.
InferXmlSchema funciona del mismo modo que ReadXml con un
XmlReadMode de InferSchema (carga datos y deduce el esquema) y
ReadXmlSchema, si el documento que se lee no contiene ningn
esquema en lnea. Sin embargo, InferXmlSchema ofrece la posibilidad
adicional de especificar que se pasen por alto determinados espacios de
nombres XML cuando se deduzca el esquema.
<NewDataSet xmlns:od="urn:schemas-microsoft-
com:officedata">
<Categories>
<CategoryID od:adotype="3">1</CategoryID>
<CategoryName od:maxLength="15" od:adotype="130">
Beverages</CategoryName>
<Description od:adotype="203">Gaseosas</Description>
</Categories>
<Products>
<ProductID od:adotype="20">1</ProductID>
<ReorderLevel od:adotype="3">10</ReorderLevel>
<Discontinued od:adotype="11">0</Discontinued>
</Products>
</NewDataSet>
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher> <state>WA</state>
</pubinfo>
</books>
Nombre Descripcin
Nombre Descripcin
XmlNodeList tiene una propiedad Count que se puede utilizar para escribir
bucles y recorrer en iteracin los nodos de XmlNodeList.
La declaracion Definir el
es insertada XmlDeclation
antes del nodo. .
<?xml version="1.0"?>
<book genre="novel" ISBN="1-861001-57-5" misc="sale item">
<title>The Handmaid's Tale</title>
<price>14.95</price>
</book>
AppendChild Agrega el nodo al final de la lista de nodos secundarios del nodo especificado.
Whitespace El valor del espacio en blanco. Puede establecer este valor en uno de
los cuatro caracteres de espacio en blanco XML reconocidos: space,
tab, CR, o LF.
SignificantWhitespace El valor del espacio en blanco significativo. Puede establecer este valor
en uno de los cuatro caracteres de espacio en blanco XML reconocidos:
space, tab, CR, o LF.
LABORATORIO 13.1
GRABAR UN DATASET EN UN ARCHIVO XML
En este escenario, se solicita guardar la informacin de los clientes en un Archivo
XML. En dicho proceso se podr realizar un filtro de los clientes por su nombre y los
registros resultados se debern almacenar en un archivo XML.
1. Ingrese a Visual Studio 2005.
2. Seleccione File->New->Project.
3. Elija las siguientes opciones:
- En Proyect Types elija Visual Basic.
- En Templates elija WindowsApplication.
- En Name coloque appFacturacion06.
- En Location coloque C:\CursoPOOII.
4. Arrastre los controles necesarios para disear el siguiente formulario como se
muestra en la figura: (Label, TextBox, Button y DataGriView).
Imports System.Data.SqlClient
9. Dentro del evento Load del Form1, cargue el DataSet con la funcin
Me.DataGridView1.DataSource = MisClientes(Space(0))
10. Dentro del evento TextChanged del TextBox txtcliente, filtramos los clientes por
su nombre, donde utilizaremos la funcion MisClientes.
Me.DataGridView1.DataSource = MisClientes(txtcliente.Text)
11. Guarde los clientes en un Archivo XML, en el evento click del bton BtnXml se
realizar dicho proceso. Se observa que utilizaremos una ventana de dilogo
que guardar el archivo XML.
LABORATORIO 13.2
CARGAR UN DATOS CON DATOS XML
En este escenario aprenderemos a trabajar con archivos XML y visualizar los datos en
un DataSet, para ello se tiene un archivo xml llamado xmldata.xml.
1. Aada un Nuevo Formulario al Proyecto.
2. Sobre el Form2.vb, cree la siguiente interface de usuario:
6. Dentro del evento click del botn Buscar Archivo XML, se abrir un archivo de
tipo XML. Para esto utilice un cuadro de dilogo OpenFileDialog se leer su
contenido y se guardar las tablas en el DataSet. Luego, procedemos a
mostrar las tablas que estn en el DataSet en un ListBox: lbTablas.
LABORATORIO 13.3
ACTUALIZACIN DE VALORES DE UN ARCHIVO XML
En este escenario, tenemos un archivo xml llamado articulos.xml donde almacena la
informacin de los precios de los artculos que vende y distribuye la empresa, se
solicita que los precios se incrementen en 10% con respecto a su valor original.
1. Ingrese a Visual Studio 2005.
2. Seleccione File->New->Project.
3. Elija las siguientes opciones:
- En Proyect Types elija Visual Basic.
- En Templates elija Windows Application.
- En Name coloque appFacturacion09.
- En Location coloque C:\CursoPOOII.
4. En la parte superior de la clase, importar el namespace System.Xml.
5. Disee el Formulario.
6. Declare, a nivel de Clase Form, un DataSet para cargar los datos de un archivo
XML, adems definir una variable llamada filexml que almacenara la ubicacin
del archivo de artculos.
Definir un
Dim op As New OpenFileDialog
StreamReader
op.Filter = "Archivo xml|*.xml"
If op.ShowDialog = Windows.Forms.DialogResult.OK Then para leer el
filexml = op.FileName archivo xml en
ds.Tables.Clear() filexml.
Dim sw As New System.IO.StreamReader(filexml)
ds.ReadXml(sw)
DataGridView1.DataSource = ds.Tables(0) Leer en el
sw.Close() DataSet el
End If StreamReader
y se visualiza
en DataGrid.
8. En el botn Incrementar precio, realizamos los siguientes procesos
a. Defina la instancia de un XmlDocument llamado myXml.
b. Cargue al XmlDocument myXml con el archivo xml en filexml.
c. Ejecute el procedimiento IncrementarPrecio, enviando como parmetro
al DocumentElement de myxml.
d. Si esta correcto el proceso, se abrir un cuadro de dilogo para
guardar los precios actualizados en un archivo xml, donde se ejecutara
el mtodo Save del objeto XmlDocument myXml.
e. Si ocurre una excepcin: Catch, se lanzar una excepcin donde se
visualizar el error de la excepcin.
Try
Dim myXml As New XmlDocument() ' Crear un XmlDocument
myXml.Load(filexml)
IncrementarPrecio(myXml.DocumentElement)
Dim sdialog As New SaveFileDialog
sdialog.Filter = "Archivo XML|*.xml"
If sdialog.ShowDialog = Windows.Forms.DialogResult.OK Then
myXml.Save(sdialog.FileName)
End If
MessageBox.Show("Actualizado en " + sdialog.FileName)
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
LABORATORIO 13.4
LECTURA DE UN ARCHIVO XML
En este escenario vamos a leer cualquier archivo xml que este almacenado donde se
visualizar su estructura, as como los valores de los nodos.
alor
tnBuscar
uscar
txml
2. Importar el
namespace System.Xml y el nameSpace System.IO.
3. En el botn buscar, se realizar la bsqueda de un archivo xml almacenando
su estructura en un XmlTextReader llamado xmlreader, a continuacin,
ejecute el procedimiento FormatXml.
Autoevaluacin
1. Cul es el mtodo que permite guardar un DataSet como Datos XML? Defina
sus opciones.
7. Cules son los mtodos que permite recuperar los nodos ordenados?
8. Cuales son los mtodos que permiten recuperar loas atributos de una
coleccin?
Resumen
Con ADO.NET es posible llenar un DataSet a partir de una secuencia o un
documento XML. Se puede utilizar la secuencia o el documento XML para
suministrar datos al DataSet, informacin de esquema o ambas cosas.
Para rellenar un DataSet con datos XML, utilice el mtodo ReadXml del objeto
DataSet. El mtodo ReadXml lee desde un archivo, una secuencia o un
XmlReader y toma como argumentos el origen de XML y un argumento
XmlReadMode que es opcional.
Un documento XML debe tener una declaracin XML y un elemento raz (root). La
clase XmlDocument tiene un metodo CreateXmlDeclaration que permite crear la
declaracin CML, tiene los siguientes parmetros: Versin la versin debe
ser1.0, Encoding, el valor del atributo encoding, por defecto es UTF-8.
Si desea consultar mas acerca de estos temas puede consultar las siguientes
paginas:
http://msdn2.microsoft.com/es-es/library/84sxtbxh(VS.80).aspx
Pgina referente a utilizar datos XML en un DataSet
http://msdn2.microsoft.com/es-es/library/7sfkwf9s(VS.80).aspx
Pgina referente a la relacin de datos anidados
http://msdn2.microsoft.com/es-es/library/atchhx4f(VS.80).aspx
Pgina referente a cargar informacin de datos en un DataSet
http://msdn2.microsoft.com/es-es/library/azsy1tw2(VS.80).aspx
Pgina referente a la lectura de un documento XML en DOM
http://msdn2.microsoft.com/es-es/library/hk61a712(VS.80).aspx
Pgina referente al acceso de atributos en DOM
UNIDAD DE
APRENDIZAJE
5
SEMANA
14
TEMARIO
ACTIVIDADES PROPUESTAS
<Basket>
<Item Desc="Uber Drill 9000">
<Category />
</Item>
<Item />
</Basket>
Root No admitido.
Element El contenido del elemento.
Attribute El valor del atributo.
Text El contenido del texto.
ProcessingInstruction El contenido, sin incluir el destino.
Comment El contenido del comentario.
Namespace No admitido.
nav.MoveToChild("bookstore", "http://www.contoso.com/books")
nav.MoveToChild("book", "http://www.contoso.com/books")
nav.MoveToChild("price", "http://www.contoso.com/books")
nav.DeleteSelf()
Console.WriteLine("Posicion despues eliminar:{0}", navigator.Name)
MessageBox.Show(navigator.OuterXml)
navigator.SetValue("")
navigator.MoveToRoot()
MessageBox.Show(navigator.OuterXml)
LABORATORIO 14.1
En este escenario se carga un objeto XPathDocument con los datos XML encontrados
en el archivo productos.xml, crea un objeto XPathNavigator para una presentacin de
los datos y, a continuacin, realizamos un conjunto de operaciones por el documento.
ListView1
Defina un
XMLDocument para
cargar el archivo XML
Defina un
XpathNavigator del
XMLDocument, ubique
en el 1er Nodo
Defina un
XMLDocument para
cargar el archivo XML.
El XpathExpression
evala la expresin
para contar los
productos,
visualizando el
resultado en el
MessageBox.
Defina un
XMLDocument para
cargar el archivo XML.
El XpathExpression
evala la expresin
para sumar el campo
stock, visualizando el
resultado en el
MessageBox.
Defina un
XMLPathNodeIterator
que almacene los
nodos cuyo stock=0
Defina un
XMLPathNodeIterator
que almacene la
descripcin del cdigo
a buscar en el mtodo
Select del
XPathNavigator.
Autoevaluacin
1. Qu es el XPathNavigator?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
______________________________________________
5. Cules son los mtodos para insertar atributos? Explique cada uno.
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
____________________________________
Resumen
La clase XPathDocument proporciona una representacin en memoria rpida
y de slo lectura de un documento XML utilizando el modelo de datos XPath.
http://msdn2.microsoft.com/es-es/library/87274khy(VS.80).aspx
Pgina referente al procesamiento de datos XML con el modelo de
datos XPath
http://msdn2.microsoft.com/es-es/library/439wyfyh(VS.80).aspx
Pgina referente al desplazamiento por nodos de espacios de nombres
y atributos con XPathNavigator
http://msdn2.microsoft.com/es-es/library/sb9ca14t(VS.80).aspx
Pgina referente a la edicin de datos en XML
http://msdn2.microsoft.com/es-es/library/xws54wwx(VS.80).aspx
Pgina referente a como quitar datos XML con XPathNavigator