Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Orientada a
Objetos II
2
ÍNDICE
Presentación 5
Red de contenidos 6
Sesiones de aprendizaje
Unidad de aprendizaje 1
SEMANA 1 : Arquitectura de ADO .NET, conexión a un base de datos, 7
consulta de datos
SEMANA 2 : Operaciones de consultas y recuperación de datos 23
utilizando DataAdapter, DataReader y Command
SEMANA 3 : Manejo del TableAdapter, Usando LINQ to SQL. 39
SEMANA 4 : Modificación de datos de una fuente de datos, manejo de 59
transacciones de datos
Unidad de aprendizaje 2
SEMANA 5 : Operaciones desconectadas con programación 83
SEMANA 6 : Operaciones desconectadas: Manejo del DataView y el 103
DataTableReader desde un DataSet
SEMANA 7 : Semana de exámenes parciales teoría
SEMANA 8 : Semana de exámenes 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 : Actualización 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 : Sustentación de proyectos
SEMANA 17 : Examen final de teoría
PRESENTACIÓN
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. Además
incorpora el nuevo modelo de factorías que hace posible un acceso genérico a
orígenes de datos, la obtención de información de esquema, las características
específicas para SQL Server o las nuevas capacidades del objeto Datatable.
Objeto Descripción
Transaction Permite incluir comandos en las transacciones
que se realizan en el origen de datos.
CommandBuilder Objeto que genera, automáticamente, las
propiedades de comando de un DataAdapter
o que obtiene, de un procedimiento
almacenado, información acerca de
parámetros con las que puede rellenar la
colección Parameters de un objeto
Command.
ConnectionStringBuilder Objeto que genera y maneja una cadena de
conexión utilizada por el objeto Connection.
Parameter Define los parámetros 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 excepción de
.NET Framework.
Error Expone la información relacionada con una
advertencia o error devueltos por un origen de
datos.
ClientPermission Se proporciona para los atributos de seguridad
de acceso a código de los proveedores de
datos de .NET Framework.
Para conectarse a una base de datos por ADO .NET, debe proveer de una
cadena de conexión para identificar la base de datos. Los valores que se incluyen
en una cadena de conexión dependen del origen de datos que utilice. A
continuación describiremos algunos parámetros de la cadena de conexión.
Parámetro Descripción
Provider Parámetro para conexiones de datos OLE DB
Initial Catalog o DataBase El nombre de la base de datos
Data Source Nombre o dirección de red del origen de datos
Integrated Security o Si el parámetro es false, debe especificar User
Trusted_Connection ID y Password en la cadena de conexión. Si es
true, la cuenta de autenticación es de
Windows.
User ID Cuenta de usuario
Password Clave de la cuenta de usuario ingresada
Persist Security Info SI el parámetro 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 métodos que permite utilizar para
ejecutar sentencias SQL:
SqlCommand Descripción
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 conexión.
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 método Open del objeto Conexión.
5. Ejecute el método del objeto Command, asignando su resultado a una
variable o control.
6. Llame al método Close del objeto conexión.
<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 artículos en una cuadrícula de datos (DataGridView).
Permite
visualizar la
lista de tareas
del control
Clickea para
añadir un
origen de
datos al
proyecto
9. Al añadir una nueva conexión, se visualiza una ventana para crear la conexión
a la base de datos, donde se ingrese el nombre del servidor Server Name,
seleccione la autenticación 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
autenticación, que puede
ser por Windows o SQL
Server.
Seleccione la base de
datos de la lista
Conexión
generada por el
asistente.
Presione la
opción
ConnectionString
para visualizar la
cadena de
conexión.
11. Creada la conexión, debemos elegir la tabla artículos para realizar la consulta,
tal como se muestra en la figura. Se puede observar que junto a la selección de
la tabla artículos se creará un DataSet llamado BDFacturaDataSet, para
almacenar la estructura de la tabla artículos. Luego, presione el botón Finish.
Seleccione la tabla
artículos 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 información de los clientes de
la base de datos DBVentas basada en una cadena select SQL. A continuación,
ejecutaremos los pasos para ejecutar la consulta SQL y mostrar los resultados en la
cuadrícula.
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 método 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 aplicación.
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 permitirán 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 conexión 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 aplicación.
Autoevaluación
6. ¿Cuáles son los objetos para realizar una conexión utilizando DBFactory
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
Resumen
El proveedor de datos .NET de SQL Server o del proveedor de datos .NET de OLE
DB requiere de la instalación de la versión 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, diseño e implementación
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
Proveedor Descripción
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 método Fill del DataAdapter se usa para llenar un DataSet con los
resultados de la propiedad SelectCommand del DataAdapter. El método 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 Descripción
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 método 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 numérica de la columna en cuestión.
Sin embargo, el mejor rendimiento se logra con los métodos 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 Descripción
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
Método Descripción
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 Descripción
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
PARÁMETROS
En este escenario, desarrollaremos una consulta a las facturas por vendedor y año,
donde al seleccionar un vendedor dentro de un ComboBox y un año dentro de un
ComboBox, visualizamos las facturas correspondientes al vendedor y año
seleccionado.
1. Agregue un nuevo formulario de Windows al proyecto.
Control
ComboBox
CboVendedor
Control Button
BtnConsulta
Control
ComboBox
CboAño
Control
DataGridView
DGFactura
da = New SqlDataAdapter
da.SelectCommand = cmd Enlazar el CboAño a
tabla, enlazamos los
tabla = New DataTable datos en el
da.Fill(tabla) DisplayMember y
ValueMember
Me.CboAño.DataSource = tabla
Me.CboAño.DisplayMember = "y"
Me.CboAño.ValueMember = "y"
LABORATORIO 2-4
NAVEGACIÓN 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.
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
Autoevaluación
1. Sobre la base del siguiente formulario, seleccione un mes y año desde los
controles ComboBox, y al hacer click en el botón consulta, visualice las
facturas en el DataGridView que coincidan con el mes y año seleccionado.
Resumen
http://msdn2.microsoft.com/es-es/library/ms254953(VS.80).aspx
Página que referencia al tema de Trabajo con comandos
http://support.microsoft.com/kb/311543/es
Página 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 actualización 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 comunicación entre su aplicación y una base de
datos mediante la ejecución de instrucciones SQL y procedimientos almacenados.
Miembro Descripción
Seleccione
el Item
DataSet
Asignarle
un Nombre:
DsFactura
Permite agregar un
TableAdapter.
Establece la conexión:
• servidor
• autenticación y
• base de datos
Al seleccionar SQL
Statement, en la siguiente
ventana definir Select.
Función GetData,
retorna los registros.
El proyecto LINQ usa características de la versión 2.0 del .NET Framework, nuevos
ensamblados relacionados con LINQ, y extensiones para los lenguajes C# y Visual
Basic .NET. Microsoft ha distribuido una versión 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, además 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 través del método 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 botón consulta,
se ejecutará el método FillBy con sus dos parámetros 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 relación
entre las tablas del DataSet.
Relación:
Clientes_Pec_cabe
3. Diseñe 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 año 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 diseñador
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. Diseña 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 aplicación y ejecute. Al ingresar dos fechas desde los TextBox listaremos
los pedidos entre las fechas ingresadas.
Autoevaluación
1. ¿Qué es un TableAdapter y cuáles son los métodos que utiliza con más
frecuencia? Explique brevemente.
3. ¿Cuáles son los pasos para crear un TableAdapter para una tabla específica?
5. ¿Cómo se pueden crear relaciones entre las tablas del DataSet? Explique los
pasos.
6. ¿Cuáles son las sentencias de programación que permite poblar los datos de
un TableAdapter a un DataTable?
Resumen
Los TableAdapters proporcionan comunicación entre su aplicación y una base de
datos mediante la ejecución de instrucciones SQL y procedimientos almacenados.
El TableAdapter carga los datos devueltos en su tabla de datos asociada de la
aplicación 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
Página referente al TableAdapter
http://msdn2.microsoft.com/es-es/library/87sfaezs(VS.80).aspx
Página referente a la consulta de Datos
http://thinkingindotnet.wordpress.com/2007/05/20/usando-linq-to-sql-
1%c2%aa-parte/
Página 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 orígenes de
datos como Microsoft SQL Server, así como a orígenes 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 TRANSACCIÓN EN .NET
Cuando se compra un libro de una librería en línea, se intercambia dinero (en
forma de crédito) por el libro. Si el crédito es correcto, una serie de operaciones
relacionadas garantiza que se obtiene el libro y que la librería obtiene el dinero.
Sin embargo, si una operación sufre un error durante el intercambio, el error
afecta a la totalidad del proceso. No se obtiene el libro y la librería no obtiene el
dinero.
Es útil para las aplicaciones que desean utilizar la misma transacción 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 específica a los métodos Commit y RollBack para confirmar o
anular la transacción. Cuando se implementa una transacción, se debe llamar
al método BeginTransaction dentro del objeto de conexión. Al crear la
transacción, puede especificar el nivel de aislamiento que se aplica a la
transacción.
Método Descripción
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
Opción Descripción
End Using
LABORATORIO 4.1
ACTUALIZACIÓN DE DATOS UTILIZANDO PROCEDIMIENTOS
ALMACENADOS.
En este escenario, vamos a realizar la actualización 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. Diseña 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 botón 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 botón Actualizar que permita actualizar los datos
de un empleado por su código. 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 botón Eliminar que permita eliminar un empleado
por su código. 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
ACTUALIZACIÓN DE DATOS UTILIZANDO UN TABLEADAPTER
En este escenario, vamos a realizar el proceso de actualización 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
continuación, desarrolle los siguientes pasos.
3. En la página Choose
Command Type seleccione la
opción create new stored
procedure, presione el botón
Next.
8. En el TableAdapter de vendedor, se
visualiza el método InsertVendedor a
continuación, Ud., desarrollará el
método UpdateVendedor que
permitirá actualizar los datos de los
vendedores por su código.
Método InsertVendedor
Método 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 actualización de los clientes registrados
en la base de datos BDFactura utilizando transacciones (transacciones explícitas).
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 botón 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 actualizarán los datos sobre dos tablas:
artículos en BDFactura y kardex en BDAlmacen:
• Cuando se agregue un nuevo artículo, éste se agregará en el kardex.
• Cuando se actualice el stock de artículos, 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
Autoevaluación
1. ¿Cuál es la diferencia entre una transacción local y una transacción distribuida?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
______________________________________________
Resumen
Las transacciones locales son útiles para las aplicaciones que desean utilizar la
misma transacción en varias llamadas a funciones o a subprocesos. Tiene que
llamar de forma específica a los métodos Commit y RollBack para confirmar o
anular la transacción.
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
Página que referencia el manejo de transacciones
http://msdn2.microsoft.com/es-es/library/ms172152(VS.80).aspx
Página que maneja la implementación de transacciones
UNIDAD DE
APRENDIZAJE
2
SEMANA
Al término 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 actualización de una
aplicación.
TEMARIO
ACTIVIDADES PROPUESTAS
2 DATASET
Opción Descripción
2.6.1 ForeignKeyConstraint
Las propiedades DeleteRule y UpdateRule definen la acción a ser
tomada cuando el usuario actualiza o elimina una fila en la tabla
relacionada. Si una fila de la tabla principal es eliminada, también se
borrarán los registros de la tabla hija que tienen el mismo valor.
A continuación, se muestra las reglas para las propiedades de
UpdateRule y DeleteRule.
Rule Descripción
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 colección Constraint de
la tabla a través del método Add.
Podemos crear una constraint de tipo Unique asignando la propiedad
Unique a true.
3 DATAADAPTER
Propiedades Descripción
Si el método 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
información 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 método 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 Descripción
Versión Descripción
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. Diseño del Formulario:
LABORATORIO 5.2
ACTUALIZACIÓN 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
ACTUALIZACIÓN DE DATOS, UTILIZANDO EL DATASET
En este escenario, se implementará un formulario para realizar el mantenimiento de
los artículos de la base de datos BDFactura.
1. Agregue un formulario al proyecto y diséñelo.
6. En el evento click del botón buscar, ubique un registro por su código, si lo ubica
llenará los TextBox.
9. Pinte el botón Actualizar Datos, el cual actualizará los datos del DataTable,
donde evalúa, primero, si no tiene errores actualizará los cambios utilizando el
método AcceptChanges, caso contrario, visualiza los errores y deshace la
operación a través del método RejectChanges.
Autoevaluación
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
Página que explica la estructura del DataSet de ADO.NET
UNIDAD DE
APRENDIZAJE
2
SEMANA
Al término 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 actualización de una
aplicación.
TEMARIO
ACTIVIDADES PROPUESTAS
1. DATAVIEW
Una DataView proporciona una vista de datos dinámica en la DataTable
subyacente: el contenido, el orden y la pertenencia reflejan los cambios en
cuanto se producen. Este comportamiento difiere del método 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 ordenación siguen siendo estáticas.
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 sólo 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 descripción. Para este caso, ingrese la descripción del producto
desde un TextBox, donde filtrará los registros por su descripción.
7. En el click del botón Consulta, donde mostramos los productos por su nombre:
a. Ingresa la descripción del producto en el control TextBox.
b. Asigne al método RowFilter la expresión de comparación.
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. Diseña 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. Diseña 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. Diseña el Formulario:
Autoevaluación
4. ¿Cuáles son los métodos para modificar los datos a través 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
Página referente al uso del método HasRows del datatableReader
http://msdn.microsoft.com/es-
es/library/system.data.datatablereader.getvalues(VS.80).aspx
Página referente al uso de los metodos Get del datatableReader
http://msdn.microsoft.com/es-es/library/system.data.dataview(VS.80).aspx
Página 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 función de si va a desarrollar una
aplicación de Windows o una aplicación Web, deberá enlazar primero el informe
con Windows Forms Viewer o con Web Forms Viewer y, a continuación, crear la
aplicación. Los usuarios pueden ejecutar la aplicación para Windows en una
plataforma de Windows o implementar la aplicación Web en un servidor Web y
ver el informe Crystal en un explorador Web.
3 DISEÑO DE INFORMES
Los informes se crean en el Diseñador de Crystal Report. El Diseñador de
Crystal Report se inicia automáticamente al añadir 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 sección Detalles se imprimen con cada
registro nuevo.
Esta sección contiene los datos del cuerpo del informe. Aquí aparece la
mayor parte de los datos de éste. Cuando se ejecuta el informe, la
sección Detalles se vuelve a imprimir para cada registro. Por ejemplo, si
añade un objeto de base de datos con 100 registros a la sección
Detalles, el informe imprimirá 100 secciones de detalle individuales en
tiempo de ejecución.
Esta sección se utiliza para incluir la información que desea que sólo
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 función de donde residan los
componentes o la arquitectura de Crystal Reports. El tipo de base de datos
que utiliza el informe también puede añadir 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 más adecuadas
para una implementación a pequeña escala, ya que la aplicación se instala en
el equipo del usuario. Si depende mucho del proceso del cliente, no dude en
optar por esta opción.
Si hay que realizar cambios en el informe, se debe volver a instalar la
aplicación en el equipo del usuario.
Escalabilidad
Los usuarios sólo 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 aplicación, los usuarios sólo 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 aplicación.
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 botón
Aceptar contrato, para
continuar con el
proceso de diseño.
7. A continuación se visualiza la
Galeria de Crystal Report para el
diseño de un Reporte. Selecciona la
opción Usar asistente de informes
y el tipo de asistente es Estándar,
presione el botón 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 botón 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 botón
Finalizar.
Campos que se
visualizan en el
reporte.
Sección
encabezado
de página.
Sección
Detalles: los
campos.
Sección pie
de página.
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 método
que liste los pedidos por un
cliente específico.
Agregue en el
TableAdapter
tb_pedidoscabe el
metodo que consulte los
pedidos por cliente.
3. Asigna el nombre
al método:
FillByCliente
4. Diseña el
formulario:
Control
ComboBox1
para listar los
clientes.
Control
CrystalReport
Viewer para
mostrar el
reporte.
Conexión a la
base de datos.
Recuperar los
clientes en el
dataTable.
Configura el
combobox1 con
los clientes.
6. Codifica el botón 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.
Autoevaluación
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 aplicación de dos niveles o Web, alberga un informe local (archivo .rpt), el
procesamiento se basa en una relación 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
Página 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
Página que permite descargar el manual del Crystal Report
UNIDAD DE
APRENDIZAJE
4
SEMANA
10
Al término de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relación
apoyándonos en un entorno visual integrado con Visual Studio, y realizar consultas a través
del nuevo lenguaje de consultas integrado.
TEMARIO
ACTIVIDADES PROPUESTAS
• Datos en todas las capas. Una plataforma de datos completa ofrece gestión
de datos y acceso a servicios de datos en cualquier lugar.
• Datos de todos los tipos. La visión de acceso a datos de Microsoft concibe un
almacén integrado capaz de almacenar y gestionar datos de todos esos tipos,
garantizar su seguridad, permitir búsquedas y consultas sobre ellos,
analizarlos, consultarlos, sincronizarlos, etc.
• Acceso a datos uniforme. Aunque las aplicaciones en diferentes capas
requieren diferentes clases de gestión de los servicios de datos, todas esperan
(requieren) una uniformidad significativa en lo relativo al entorno de desarrollo
de aplicaciones (modelos de programación y herramientas).
• Visión completa del negocio. Gira alrededor de la tecnología que puede
permitir a nuestros clientes recoger, limpiar, almacenar y preparar sus datos de
negocio para el proceso de toma de decisiones. Gira también alrededor de las
experiencias que los Usuarios del Negocio y los Trabajadores de la Información
tendrán al acceder, analizar, visualizar y generar informes a partir de los datos
mientras recopilan la información 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 sincronización, la seriación para el intercambio de datos (o para servicios
Web), análisis y generación 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 específico 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 compilación. Para hacer posible esto, LINQ To SQL se
apoya en las siguientes características clave:
• Las innovaciones del lenguaje (C# 3.0 y VB 9.0), así como en las
características propias de LINQ (consultas integradas en el lenguaje).
• Mapping del esquema de la BD en clases, propiedades, métodos, 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 típicamente
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 específica, lo que significa que pueden heredar de
cualquier objeto que queramos. Todas las clases creadas por el
diseñador de LINQ to SQL se definen como “clases parciales” con lo que
podemos, opcionalmente, añadir propiedades adicionales, métodos y
eventos.
Una de las cosas que nos aporta LINQ to SQL es que nos da una total
flexibilidad en cómo consultar nuestros datos, y podemos aprovecharnos de
las asociaciones que hicimos cuando modelamos las clases de LINQ to SQL
para hacer consultas más naturales y ricas sobre la base de datos.
Después de realizar los cambios que queramos a los objetos que hemos
obtenido con LINQ to SQL, podemos llamar al método “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.
Métodos:
Procedimientos
almacenados
LABORATORIO 10.1
CONSULTA DE PEDIDOS POR CLIENTE Y AÑO
En este escenario vamos a listar los pedidos por un cliente y año, el cual seleccione un
cliente desde un ComboBox e ingrese el año desde el control TextBox y al presionar el
botón Consulta visualice los pedidos por cliente seleccionado y año 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
diseñador llamado
DataVentas.dbml y
establecer la
asociación 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 botón 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 código utilizando el modelo de objetos
LINQ to SQL.
1. En el DataContext
DataVentas agregue
la tabla tb_paises y
establezca la
asociación 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 botón 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 botón Modificar, para actualizar los datos de un
cliente seleccionado y actualizando a la base de datos.
8. Codifique el evento Click del botón Eliminar para eliminar un cliente por su
código 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 método al DataContext.
Procedimiento
almacenado
usp_pedidos_Fecha
agregado como método.
Autoevaluación
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
Resumen
La tabla de los proveedores LINQ incorporados “de serie” a .NET Framework 3.5:
o LINQ to Objects, para consultar arrays y colecciones de objetos en memoria.
o LINQ to XML, para consultar y actualizar documentos XML.
o LINQ to DataSets, para consultar y actualizar conjuntos de datos.
o LINQ to SQL y LINQ to Entities, para consultar y actualizar bases de datos
relacionales.
El diseñador de LINQ to SQL nos aporta una forma fácil 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
Página referente a la evolución de APIs: LINQ
http://thinkingindotnet.wordpress.com/2007/07/13/linq-to-sql-4%c2%aa-
parte-actualizando-la-base-de-datos/
Página referente a la actualización de datos utilizando LINQ to SQL
http://thinkingindotnet.wordpress.com/2007/08/17/linq-to-sql-parte-6-
obtener-datos-con-procedimientos-almacenados/
Página referente al manejo de procedimientos almacenado en LINQ to
SQL
UNIDAD DE
APRENDIZAJE
4
SEMANA
11
Al término de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relación
apoyándonos en un entorno visual integrado con Visual Studio, y realizar consultas a través
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 automáticamente de su persistencia.
Entity Framework proporciona los medios para definir estas capas mediante los
archivos XML. Esto proporciona un nivel de abstracción que permite a los
desarrolladores programar para el modelo conceptual en lugar del modelo
relacional.
Selecciona la
plantilla ADO.NET
Entity Data Model.
Conexión a la
base de datos del
app.config.
Nombre de la
conexión 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 versión 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
programación utilizado para crear la lógica 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 Descripción
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 Parámetro de un EntityCommand.
EntityProviderFactory Representa un conjunto de métodos para crear
o implementer las clases del origen de datos.
EntityTransaction Transacción para un EntityCommand.
Imports System.Data.EntityClient
. . .
Dim cn As New EntityConnection("Name=DBVentasEntities")
EntityCommand Descripción
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 continuación sigua los siguientes pasos para realizar este proceso.
Selecciona la
plantilla ADO.NET
Entity Data Model
6. Especifica la cadena de
conexión a la BD y
FINALIZAR.
Conexión a la
base de datos del
app.config
Nombre de la
conexión 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, diseñe el formulario tal como se muestra.
5. Defina, en el evento Click del botón 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 aplicación.
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, diseñe el formulario tal como se muestra.
Me.DataGridView1.DataSource = DB.tb_clientes.ToList
Autoevaluación
Resumen
Las tres técnicas 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 versión 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
programación utilizado para crear la lógica 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
Página referente al marco de los objetos de entidad
http://msdn.microsoft.com/es-ar/library/system.data.entityclient(en-
us).aspx
Página referente al ADO.NET Entity Provider
http://msdn.microsoft.com/es-es/magazine/cc507640.aspx
Página referente al modelo de Entidad
UNIDAD DE
APRENDIZAJE
4
SEMANA
12
Al término de la unidad, los alumnos mediante aplicaciones Windows .NET utilizan una
plataforma de acceso a datos, para mapear un modelo conceptual de tipo entidad-relación
apoyándonos en un entorno visual integrado con Visual Studio, y realizar consultas a través
del nuevo lenguaje de consultas integrado.
TEMARIO
ACTIVIDADES PROPUESTAS
Los Servicios de Objeto son puestos en práctica 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 métodos 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 método 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 continuación 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
conexión a la BD y
FINALIZAR.
Conexión a la
base de datos del
app.config.
Nombre de la
conexión 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, diseñe el formulario tal como se muestra.
5. Defina, en el evento Click del botón 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
Autoevaluación
Resumen
Cuando quieres agregar data en el origen de datos, debes crear una instancia del
tipo de la Entidad y añadir 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 métodos para realizar los cambios asignando a cada propiedad de
la entidad para crear la lógica 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
Página 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
Página referente al los servicios de objetos y entidades
http://msdn.microsoft.com/es-es/magazine/cc507640.aspx
Página 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 realización de declaraciones de contenido
más precisas y la obtención de resultados de búsqueda más significativos en varias
plataformas. Además, XML permite la separación de la presentación de datos.
Opción Descripción
Escribe el contenido del DataSet como datos XML sin un
IgnoreSchema
esquema XML.
Tipo Descripción
Modo Descripción
Valor predeterminado. Examina el código XML y elige la opción 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 línea al esquema existente en el DataSet. Si el DataSet
no contiene esquema de una tabla, no se leerá ningún dato.
Pasa por alto cualquier esquema en línea y carga los datos en el
IgnoreSchema
esquema del DataSet existente.
Pasa por alto cualquier esquema en línea, 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
También, puede indicar al DataSet que deduzca su esquema a partir de un
documento XML mediante el método 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 ningún
esquema en línea. 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 Descripción
Nombre Descripción
XmlNodeList tiene una propiedad Count que se puede utilizar para escribir
bucles y recorrer en iteración 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 información 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 deberán 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 diseñar 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 función
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 bóton BtnXml se
realizará dicho proceso. Se observa que utilizaremos una ventana de diálogo
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. Añada un Nuevo Formulario al Proyecto.
2. Sobre el Form2.vb, cree la siguiente interface de usuario:
6. Dentro del evento click del botón Buscar Archivo XML, se abrirá un archivo de
tipo XML. Para esto utilice un cuadro de diálogo OpenFileDialog se leerá su
contenido y se guardará las tablas en el DataSet. Luego, procedemos a
mostrar las tablas que están en el DataSet en un ListBox: lbTablas.
LABORATORIO 13.3
ACTUALIZACIÓN DE VALORES DE UN ARCHIVO XML
En este escenario, tenemos un archivo xml llamado “articulos.xml” donde almacena la
información de los precios de los artículos 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. Diseñe el Formulario.
6. Declare, a nivel de Clase Form, un DataSet para cargar los datos de un archivo
XML, además definir una variable llamada filexml que almacenara la ubicación
del archivo de artículos.
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 botón 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 parámetro
al DocumentElement de myxml.
d. Si esta correcto el proceso, se abrirá un cuadro de diálogo para
guardar los precios actualizados en un archivo xml, donde se ejecutara
el método Save del objeto XmlDocument myXml.
e. Si ocurre una excepción: Catch, se lanzará una excepción donde se
visualizará el error de la excepción.
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 botón buscar, se realizará la búsqueda de un archivo xml almacenando
su estructura en un XmlTextReader llamado xmlreader, a continuación,
ejecute el procedimiento FormatXml.
Autoevaluación
1. ¿Cuál es el método que permite guardar un DataSet como Datos XML? Defina
sus opciones.
7. ¿Cuáles son los métodos que permite recuperar los nodos ordenados?
8. ¿Cuales son los métodos que permiten recuperar loas atributos de una
colección?
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, información de esquema o ambas cosas.
Para rellenar un DataSet con datos XML, utilice el método ReadXml del objeto
DataSet. El método 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 declaración XML y un elemento raíz (root). La
clase XmlDocument tiene un metodo CreateXmlDeclaration que permite crear la
declaración CML, tiene los siguientes parámetros: Versión la versión debe
ser”1.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
Página referente a utilizar datos XML en un DataSet
http://msdn2.microsoft.com/es-es/library/7sfkwf9s(VS.80).aspx
Página referente a la relación de datos anidados
http://msdn2.microsoft.com/es-es/library/atchhx4f(VS.80).aspx
Página referente a cargar información de datos en un DataSet
http://msdn2.microsoft.com/es-es/library/azsy1tw2(VS.80).aspx
Página referente a la lectura de un documento XML en DOM
http://msdn2.microsoft.com/es-es/library/hk61a712(VS.80).aspx
Página 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 presentación de
los datos y, a continuación, 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
evalúa la expresión
para contar los
productos,
visualizando el
resultado en el
MessageBox.
Defina un
XMLDocument para
cargar el archivo XML.
El XpathExpression
evalúa la expresión
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
descripción del código
a buscar en el método
Select del
XPathNavigator.
Autoevaluación
1. ¿Qué es el XPathNavigator?
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
______________________________________________
5. ¿Cuáles son los métodos para insertar atributos? Explique cada uno.
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
____________________________________
Resumen
La clase XPathDocument proporciona una representación en memoria rápida
y de sólo lectura de un documento XML utilizando el modelo de datos XPath.
http://msdn2.microsoft.com/es-es/library/87274khy(VS.80).aspx
Página referente al procesamiento de datos XML con el modelo de
datos XPath
http://msdn2.microsoft.com/es-es/library/439wyfyh(VS.80).aspx
Página referente al desplazamiento por nodos de espacios de nombres
y atributos con XPathNavigator
http://msdn2.microsoft.com/es-es/library/sb9ca14t(VS.80).aspx
Página referente a la edición de datos en XML
http://msdn2.microsoft.com/es-es/library/xws54wwx(VS.80).aspx
Página referente a como quitar datos XML con XPathNavigator