Manual Programacion Orientada A Objetos II
User Manual:
Open the PDF directly: View PDF .Page Count: 280
Programación
Orientada a
Objetos II
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
2
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
3
ÍNDICE
Presentación
Red de contenidos
Unidad I: INTRODUCCION AL DESARROLLO WEB
1.1 Tema 1
: Introducción a ASP.NET MVC
9
1.2 Tema 2
: Arquitectura de ASP.NET MVC
31
Unidad II: TRABAJANDO CON DATOS EN ASP.NET MVC
2.1 Tema 3
: Interacción con el modelo de datos
63
2.2 Tema 4
: Manejo de Vistas
103
2.3 Tema 5
: Arquitectura “N” capas orientadas al Dominio
129
Unidad III: IMPLEMENTANDO UNA APLICACIÓN E-COMMERCE
3.1 Tema 6
: Implementando una aplicación e-commerce
165
Unidad IV: CONSUMO DE SERVICIOS
4.1 Tema 7
: Implementacion y consumo de servicios WCF
189
4.2 Tema 8
: Implementacion consumo de servicios Web API
223
Unidad V: PATRONES DE DISEÑO CON ASP.NET MVC
5.1 Tema 9
: Inversion of Control
243
APENDICE
A : Jquery y Ajax
CIBERTEC
262
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
4
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
5
PRESENTACIÓN
Visual Studio 2015 y su plataforma .NET FrameWork 4.5.2 permite implementar
desarrollos de software de manera rápida y robusta. ASP .NET, tanto en Web
Form como en MVC, admiten crear aplicaciones en tiempo mínimo bajo una
plataforma de librerías del .NET Framework. De esta manera, la aplicación puede
desarrollarse para entornos web y, luego, tener la posibilidad de emplear
cualquier dispositivo como cliente (Smartphone, Tablets, etc.) con muy poca
modificación.
El curso de Programación Orientada a Objetos II es un curso que pertenece a
la línea de programación y desarrollo de aplicaciones con tecnología Microsoft,
y se dicta en las carreras de TI de la institución. Brinda un conjunto de
herramientas, plantillas y librerías de programación que permite a los alumnos
desarrollar, en forma eficaz, soluciones a los problemas planteados en el curso.
El manual para este curso ha sido diseñado bajo la modalidad de unidades de
aprendizaje, las que desarrollamos durante semanas determinadas. En cada una
de ellas, el alumno hallará los logros que se deberá alcanzar al final de la unidad;
el tema tratado, el cual será ampliamente desarrollado; y los contenidos que
debe desarrollar. Por último, encontrará las actividades y trabajos prácticos que
deberá desarrollar en cada sesión, los que le permitirá reforzar lo aprendido en
la clase.
El curso es eminentemente práctico, consiste en un taller de programación con
Visual Studio y el framework de MVC. En la primera parte del curso se
desarrollan aplicaciones Web con Core ASP.NET MVC, acceso a datos
utilizando las clases ADO.NET y el uso del motor de renderizado Razor para la
vista de presentación. En la segunda parte del curso se profundiza el uso de la
Arquitectura de Capas con de Dominio, implementando dicho proceso en una
aplicación e-commerce. Por último, desarrollamos una aplicación Web para
exportar los datos a un archivo de ReportViewer.
El curso es eminentemente práctico, consiste en un taller de programación con
Visual Studio y el framework de MVC. En la primera parte del curso se
desarrollan aplicaciones Web con Core ASP.NET MVC, acceso a datos
utilizando las clases ADO.NET y el uso del motor de renderizado Razor para la
vista de presentación. En la segunda parte del curso se profundiza el uso de la
Arquitectura de Capas con de Dominio, implementando dicho proceso en una
aplicación e-commerce. Por último, desarrollamos una aplicación Web para
exportar los datos a un archivo de ReportViewer.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
6
REDDECONTENIDOS
Desarrollo de Servicio Web I
Introducci
ón al
desarrollo
Web
Introducció
na
ASP.Net
MVC
Arquitectu
ra de
ASP.NET
MVC
Trabajando
con datos
en
ASP.NET
MVC
Interacciòn
con el
modelo de
datos
Arquitectu
ra “N”
capas en
ASP.NET
MVC
Manejo de
Vistas
CIBERTEC
Implementa
ndo ecommerce
en
ASP.NET
MVC
Consumo
de
Servicios
Implement
ando y
consumo
de
servicios
WCF
Implement
ando una
aplicación
ecommerce
Patrones de
diseño con
ASP.Net
MVC
Implement
ando y
consumo
de
servicios
WEB API
Inversion
of control
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
7
UNIDAD DE
APRENDIZAJE
1
INTRODUCCION AL ASP.NET
CORE MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno desarrolla interfaces de usuario para una aplicación
Web utilizando el patrón de diseño MVC.
TEMARIO
Tema 1: Introducción a ASP.NET Core MVC (3 horas)
1. Introducción al patrón MVC
2. ASP.NET Core MVC
3. Plataforma ASP.NET Core MVC
4. Models
5. Vistas
6. Controllers
7. Razor y Scaffolding
8. URL de enrutamiento
ACTIVIDADES PROPUESTAS
Los alumnos implementan un proyecto web utilizando en patrón de diseño Modelo
Vista Controlador.
Los alumnos desarrollan los laboratorios de esta semana
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
8
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
1.
9
ASP.NET MVC
1.1 Introducción a ASP.NET MVC
ASP.NET MVC es una implementación reciente de la arquitectura Modelo-VistaControlador sobre la base ya existente del Framework ASP.NET otorgándonos de esta
manera un sin fin de funciones que son parte del ecosistema del Framework .NET.
Además que nos permite el uso de lenguajes de programación robustos como C#, Visual
Basic .NET.
ASP.NET MVC nace como una opción para hacer frente al ya consagrado y alabado
Ruby on Rails un framework que procura hacer uso de buenas practicas de programación
como la integración de Unit tests o la separación clara de ocupaciones, dándonos casi
todos los beneficios otorgados por Ruby on Rails y sumando el gran y prolijo arsenal
proporcionado por .NET.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
-
Uso del patrón Modelo-Vista-Controlador.
Facilidad para el uso de Unit Tests.
Uso correcto de estándares Web y REST.
Sistema eficiente de routing de links.
Control a fondo del HTML generado.
Uso de las mejores partes de ASP.NET.
Es Open Source.
La siguiente figura muestra los principales componentes de su arquitectura:
Figura: 1
Ref: https://jjestruch.wordpress.com/2012/02/21/arquitectura-ddd-domain-driven-design-asp-netmvc/
¿ASP.NET MVC es mejor que ASP.NET Web Form?
Esta pregunta se responde fácilmente, ASP.NET MVC lo deberíamos usar cuando
tengamos que hacer un Software que sea de gran envergadura y en donde la
mantenibilidad y escalabilidad sean factores primordiales, en contraste deberíamos de
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
10
usar ASP.NET web form cuando hagamos aplicaciones simples donde el factor
primordial sea el tiempo.
El marco ASP.NET MVC ofrece las siguientes ventajas:
Esto hace que sea más fácil de gestionar la complejidad de dividir una aplicación en
el modelo, la vista y el controlador.
No utiliza el estado de vista o formas basadas en servidor. Esto hace que el marco
idóneo MVC para los desarrolladores que quieren un control total sobre el
comportamiento de una aplicación.
Utiliza un patrón Front Controller que procesa las solicitudes de aplicaciones web a
través de un solo controlador. Esto le permite diseñar una aplicación que es
compatible con una rica infraestructura de enrutamiento.
Proporciona un mejor soporte para el desarrollo guiado por pruebas (TDD).
Funciona bien para las aplicaciones web que son apoyados por grandes equipos de
desarrolladores y diseñadores web que necesitan un alto grado de control sobre el
comportamiento de la aplicación.
El marco de trabajo basado en formularios Web ofrece las siguientes ventajas:
Es compatible con un modelo de eventos que conserva el estado a través de HTTP,
lo que beneficia el desarrollo de aplicaciones Web de línea de negocio. La aplicación
basada en formularios Web ofrece decenas de eventos que se admiten en cientos
de controles de servidor.
Utiliza un patrón Controlador Página que añade funcionalidad a las páginas
individuales.
Utiliza el estado de vista sobre las formas basadas en servidor, que puede hacer la
gestión de la información de estado más fácil.
Funciona bien para pequeños equipos de desarrolladores web y diseñadores que
quieren aprovechar el gran número de componentes disponibles para el desarrollo
rápido de aplicaciones.
En general, es menos complejo para el desarrollo de aplicaciones, ya que los
componentes (la clase de página, controles, etc.) son fuertemente integrado y por lo
general requieren menos código que el modelo MVC.
1.2 ASP.NET Core MVC
El Modelo-Vista-Controlador (MVC) es un patrón arquitectónico que separa una
aplicación en tres componentes principales: el modelo, la vista y el controlador. El marco
ASP.NET MVC proporciona una alternativa al modelo de formularios Web Forms
ASP.NET para crear aplicaciones Web.
ASP.NET MVC es un marco de presentación de peso ligero, altamente comprobable de
que (al igual que con las aplicaciones basadas en formularios web) se integra con las
características ASP.NET existentes, como páginas maestras y autenticación basada en
membresía. El framework MVC se define en la asamblea System.Web.Mvc.
Modelo
Contiene el núcleo de la funcionalidad (dominio) de la aplicación.
Encapsula el estado de la aplicación.
No sabe nada / independiente del Controlador y la Vista.
Vista
Es la presentación del Modelo.
Puede acceder al Modelo pero nunca cambiar su estado.
Puede ser notificada cuando hay un cambio de estado en el Modelo.
Controlador
Reacciona a la petición del Cliente, ejecutando la acción adecuada y creando el
modelo pertinente
Es importante mencionar que el patrón MVC no es exclusivo para el diseño Web, en sus
inicios fue muy utilizado para el desarrollo de interfaces graficas de usuario (GUI), por
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
11
otro lado tampoco es una implementación propietaria de alguna empresa tecnológica,
sea Microsoft, Oracle o IBM.
MVC está implementando por muchas herramientas tales como:
Ruby
Java
Perl
PHP
Python
.NET
La siguiente figura muestra la idea grafica del patrón MVC para el entorno de la Web.
Figura: 2
Referencia: http://www.adictosaltrabajo.com/tutoriales/zk-mvc/
1.3 Plataforma ASP.NET MVC Core
ASP.NET MVC es la plataforma de desarrollo web de Microsoft basada en el conocido
patrón Modelo-Vista-Controlador. Está incluida en Visual Studio y aporta interesantes
características a la colección de herramientas del programador Web.
Figura: 3
Referencia: http://codigobase.com/el-porque-del-mvc-modelo-vista-controlador
Su arquitectura permite separar las responsabilidades de una aplicación Web en partes
diferenciadas y ofrece diversos beneficios:
CIBERTEC
Facilidad de mantenimiento
Facilidad para realizar testeo unitario y desarrollo orientado a pruebas.
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
12
URLs limpias, fáciles de recordar y adecuadas para buscadores.
Control absoluto sobre el HTML resultante generado, con la posibilidad de crear
webs "responsive" usando plantillas del framework Bootstrap de forma nativa.
Potente integración con jQuery y otras bibliotecas JavaScript.
Magnífico rendimiento y escalabilidad
Gran extensibilidad y flexibilidad
Características de la plataforma ASP.NET MVC
ASP.NET Web API: Es un nuevo framework el cual nos permite construir y consumir
servicios HTTP (web API’s) pudiendo alcanzar un amplio rango de clientes el cual incluye
desde web browsers hasta dispositivos móviles. ASP.NET Web API es también una
excelente plataforma para la construcción de servicios RESTFul
Mejora de los templates predeterminados de proyecto: Los templates de proyecto de
ASP.NET fueron mejorados para obtener sitios web con vistas mucho más modernas y
proveer vistas con rendering adaptativo para dispositivos móviles. Los templates utilizan
por defecto HTML5 y todas las características de los templates son instaladas utilizando
paquetes NuGet de manera que se puede obtener las actualizaciones de los mismos de
manera muy simple.
Templates de proyectos móviles: En el caso de que estés empezando un nuevo proyecto
y quieras que el mismo corra exclusivamente en navegadores de dispositivos móviles y
tablets, se puede utilizar el Mobile Application Project template, el cual está basado en
jQuery Mobile, una librería open source para construir interfaces optimizadas para el uso
táctil
Modos de visualización: el nuevo modo de visualización permite a MVC seleccionar el
tipo de vista más conveniente dependiendo del navegador que se encuentre realizando
el requerimiento. La disposición de las vistas y las vistas parciales pueden ser
sobrescritas dependiendo de un tipo de navegador en particular.
Soporte para llamados asincrónicos basados en tareas: Podemos escribir métodos
asincrónicos para cualquier controlador como si fueran métodos ordinarios, los cuales
retornan un objeto tipo Task o Task.
Unión y minimización: Nos permite construir aplicaciones web que carguen mucho más
rápidamente y sean más reactivas para el usuario. Estas aplicaciones minimizan el
número y tamaño de los requerimientos HTTP que nuestras páginas realizan para
recuperar los recursos de JavaScript y CSS.
Mejoras para Razor: ASP.NET MVC 5 incluye la última view engine de Razor, la cual
incluye mejor soporte para la resolución de referencias URL utilizando la sintaxis basada
en tilde (~/), asi como también provee soporte para atributos HTML condicionales.
1.3.1 Vistas
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente
para encapsular la lógica de presentación. No deben contener lógica de aplicación ni
código de recuperación de base de datos. El controlador debe administrar toda la lógica
de aplicación. Una vista representa la interfaz de usuario adecuada usando los datos que
recibe del controlador. Estos datos se pasan a una vista desde un método de acción de
controlador usando el método View.
Las vistas en MVC ofrecen tres características adicionales de las cuales se puede
especificar: Create a strongly-typed view, Create as a parcial view y Use a layout or
master page
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
13
Creación de Vistas de Tipado Fuerte: Esta casilla se selecciona cuando la vista va
a estar relacionada a un Modelo y este objeto debe ser un parámetro de la acción en
el controlador.
Creacion de Vistas Parciales: Cuando es necesario reutilizar código HTLM en
diferentes partes del proyecto, se crea una vista de este tipo. Por ejemplo el menú
debe estar presente en gran parte de la aplicación, esta vista seria parcial y solo se
crearía una sola vez. Para crea una vista parcial se debe nombrar de la siguiente
forma: _NombreVistaParcial, la nombre se le debe anteponer el símbolo “_”. Ejemplo
_LoginPartial.cshtml ubicado en la carpeta /Views/Shared.
Usar como Plantilla o Pagina Maestra: Es una vista genérica de toda la aplicación,
es la que contendrá el llamado a los archivo JS y CSS. Las vistas de este tipo deben
cumplir con la misma regla para llamar el archivo, al nombre se le debe anteponer el
símbolo “_”. El llamado dinámico de las vistas por el Controlador se realiza por medio
de la función RenderBody().
1.3.2 Controladores
El marco de ASP.NET MVC asigna direcciones URL a las clases a las que se hace
referencia como controladores. Los controladores procesan solicitudes entrantes,
controlan los datos proporcionados por el usuario y las interacciones y ejecutan la lógica
de la aplicación adecuada. Una clase controlador llama normalmente a un componente
de vista independiente para generar el marcado HTML para la solicitud.
La clase Controller hereda de ControllerBase y es la implementación predeterminada
de un controlador. Esta clase es responsable de las fases del procesamiento siguientes:
Localizar el método de acción adecuado para llamar y validar que se le puede llamar.
Obtener los valores para utilizar como argumentos del método de acción.
Controlar todos los errores que se puedan producir durante la ejecución del método
de acción.
Proporcionar la clase WebFormViewEngine predeterminada para representar los
tipos de página ASP.NET (vistas).
Todas las clases de controlador deben llevar el sufijo "Controller" en su nombre. En el
ejemplo siguiente se muestra la clase de controlador de ejemplo, que se denomina
HomeController. Esta clase de controlador contiene métodos de acción que representan
las páginas de vista.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
14
1.1.3 Razor y Scaffolding
Scaffolding implica la creación de plantillas a través de los elementos del proyecto a
través de un método automatizado.
Los scaffolds generan páginas que se pueden usar y por las que se puede navegar, es
decir, implica la construcción de páginas CRUD. Los resultados que se aplica es ofrecer
una funcionalidad limitada.
La técnica scaffolding es un proceso de un solo sentido. No es posible volver a aplicar la
técnica scaffolding en los controladores y las vistas para reflejar un modelo sin
sobrescribir los cambios. Por lo tanto, se debe evaluar los módulos que se han
personalizado para saber a qué modelos se les puede volver a aplicar la técnica
scaffolding y a cuáles no.
Cuando tiene la clase del modelo listo, Scaffolding y la Vista permite realizar CRUD
(Create, Read, Update, Delete) operaciones. Todo lo que necesitas hacer es seleccionar
la plantilla scafold y el modelo de datos para generar los métodos de acción que se
implementarán en el controlador.
Razor es una sintaxis basada en C# que permite usarse como motor de programación
en las vistas o plantillas de nuestros controladores.No es el único motor para trabajar con
ASP.NET MVC. Entre los motores disponibles destaco los más conocidos: Spark,
NHaml, Brail, StringTemplate o NVelocity, algunos de ellos son conversiones de otros
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
15
lenguajes de programación. En Razor el símbolo de la arroba (@) marca el inicio de
código de servidor.
El uso de la @ funciona de dos maneras básicas:
@expresión: Renderiza la expresión en el navegador. Así @item.Nombre muestra el
valor de ítem.Nombre.
@{ código }: Permite ejecutar un código que no genera salida HTML.
1.1.4 URL de Enrutamiento
Por defecto cuando creamos una aplicación ASP.NET MVC se define una tabla de
enrutamiento que se encarga de decidir qué controlador gestiona cada petición Web
basándose en la URL de dicha petición. Esta forma de enrutamiento presenta dos
grandes ventajas con respecto a las aplicaciones tradicionales de ASP.NET:
1. En cada petición URL no se asigna un archivo físico del disco como una página
.aspx, sino que se asigna una acción de un controlador (más un parámetro), que nos
mostrará una vista específica.
2. Las rutas son lógicas, es decir, siguen la estructura definida en la tabla de
enrutamiento, lo que favorece y facilita la gestión de la navegación en nuestro sitio.
La tabla de enrutamiento que se genera por defecto al crear una aplicación ASP.NET
MVC, la cual se encuentra en archivo RouteConfig.cs de la carpeta App_Start.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
16
Estructura de una aplicación ASP.NET MVC
Para crear una aplicación con ASP.NET MVC, abrimos Visual Studio y seleccionamos
“Nuevo Proyecto”.
Selecciona la plantilla Aplicación web ASP.NET MVC, tal como se muestra. Asigne el
nombre al proyecto
A continuación seleccionamos la plantilla del proyecto, el cual será de tipo MVC
Al seleccionar dicha plantilla, las carpetas y referencias principales serán de tipo MVC.
Al terminar con el proceso hacer click en la opción ACEPTAR.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
17
Estructura de directorios y archivos.
Cuando creamos una nueva aplicación con ASP.NET MVC se crea por defecto una
estructura de directorios, apropiada para la gran mayoría de las aplicaciones.
Directorio App_Data.
Este directorio está pensado para ubicar archivos de datos, normalmente bases de datos
MSSQL. También es el lugar adecuado para archivos XML o cualquier otra fuente de
datos. Inicialmente está vacio.
Directorio App_Start.
Este directorio, contiene los archivos de código que se ejecutan al inicializar la aplicación.
Toda aplicación ASP.NET MVC es una instancia derivada de la clase
System.Web.HttpApplication, definida en el archivo global.asax. Esta clase es la
encargada de iniciar la aplicación, el directorio App_Start está pensando para ubicar las
clases de configuración para el inicio de la aplicación. La siguiente imagen muestra el
contenido del directorio.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
18
Por defecto contiene los siguientes archivos (clases):
AuthConfig.cs
BundleConfig.cs
FilterConfig.cs
RouteConfig.cs
WebApiConfig.cs
Directorio Content.
El directorio Content está pensado para el contenido estático de la aplicación,
especialmente útil para archivos css e imágenes asociadas. ASP.NET MVC nos ofrece
por defecto una organización en base a “temas”, que nos permita personalizar el aspecto
visual de nuestra aplicación de forma fácil y rápida.
Directorio Controllers.
El directorio controllers es el lugar para los controladores. Los controladores son las
clases encargadas de recibir y gestionar las peticiones http de la aplicación.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
19
Directorio Models
El directorio models es la ubicación que nos propone ASP.NET MVC para las clases que
representan el modelo de la aplicación, los datos que gestiona nuestra aplicación.
Directorio Scripts
El directorio scripts está pensado para ubicar los archivos de javascript (*.js). El código
javascript es ejecutado en el contexto del navegador, es decir, en la parte cliente, y nos
permite ejecutar acciones sin necesidad de enviar los datos al servidor.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
20
Directorio Views
El directorio Views contiene los archivos de la vista. Los controladores devuelven vistas
sobre las que imprimimos el modelo de nuestra aplicación. Estas vistas son interpretadas
por el motor de renderización – Razor en nuestro caso.
Directorio Shared
Contiene las vistas que van a ser reutilizadas en otras vistas, se incluye vistas parciales.
Es muy importante respetar la ubicación de los archivos, ya que cuando desde una vista
hagamos la llamada @Html.Partial(“Error”) para incluir la vista de la pantalla de error, el
motor buscará en el directorio Shared para encontrar la vista Error.cshtml.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
21
Archivo _ViewStart.cshtml
Este archivo establece el layout por defecto de las páginas. El contenido del archivo es
sencillo y únicamente especifica el archivo de layout.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
El layout es un archivo con extension .cshtml que contiene la estructura general de
documento, que es reutilizada en el resto de vistas. De este modo evitamos tener que
reescribir el código en todas las vistas, reutilizando el código y permitiendo que este sea
mucho más sencillo de mantener.
Archivo _Layout.cshtml
El archivo _Layout.cshtml definela capa de la aplicación, que contiene la estructura
general de documento, que es reutilizada en el resto de vistas.
El archivo _Layout.cshtml se encuentra dentro del directorio Views/Shared. El contenido
del archivo layout por defecto se muestra a continuación:
Fijemonos en la llamada que hace Razor al método @RenderBody(), es ahí donde se
procesará la vista que estemos mostrando. Podemos tener múltiples archivos de layout
dentro de nuestro proyecto.
El archivo web.config
El archivo web.config es el archivo principal de configuración de ASP.NET. Se trata de
un archivo XML donde se define la configuración de la aplicación. Veremos poco a poco
el contenido de este fichero, aunque vamos a ver aquí algunas características generales
que es necesario conocer.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
22
El archivo global.asax
Toda aplicación ASP.NET MVC es una instancia de una clase derivada de
System.Web.HttpApplication. Esta clase es el punto de entrada de nuestra aplicación, es
el Main de la aplicación web.
Desde este archivo podemos manejar eventos a nivel de aplicación, sesión, cache,
autenticacion, etc.
Este archivo varia mucho desde la versión anterior de ASP.NET MVC, aunque el
funcionamiento es el mismo. En ASP.NET MVC se ha incluido el directorio App_Start
que nos permite organizar como se inicializa la aplicación.
Home Controller
La clase HomeController es el punto de entrada de la aplicación, la página por defecto.
Cuando creamos un nuevo proyecto ASP.NET MVC se crea también un controlador
HomeController situado directamente el folder Controllers.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
23
Laboratorio 1.1
Creando una aplicación ASP.NET MVC
Implemente un proyecto ASP.NET MVC aplicando el patrón arquitectónico MVC donde permita
crear una página de inicio de un sitio web.
Creando el proyecto
Iniciamos Visual Studio 2015 y creamos un nuevo proyecto:
1. Seleccionar el proyecto Web Visual Studio 2015
2. Seleccionar el FrameWork: 4.5.2
3. Seleccionar la plantilla Aplicación web de ASP.NET
4. Asignar el nombre del proyecto
5. Presionar el botón ACEPTAR
A continuación, seleccionar la plantilla del proyecto MVC. Presiona el botón ACEPTAR
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
24
Agregando la carpeta imágenes
En el explorador de soluciones, agregar una carpeta Nueva, llamada imágenes. En dicha
carpeta agregar los archivos de imágenes: jpg.
Crear carpeta y agregar
archivos
Agregando Hojas de Estilo css
Para brindar un mejor estilo a la vista, agregamos, en la carpeta Content, una hoja de estilo
llamada estilos.css, tal como se muestra la figura.
Crear archivo estilos.css
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
25
A continuación definimos estilos a las etiquetas que utilizará las páginas cshtml.
Agregando archivo Script js
Para programar la página principal.cshtml, agregamos, en la carpeta Script, un archivo
librería.js, tal como se muestra la figura
Crear archivo librería.js
A continuación visualizamos el contenido del archivo js, donde programamos la clase .itmenu
en el evento hover.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
26
Trabajando con el _Layout
Abrir la pagina _Layout, para realizar el diseño de la página maestra.
Primero agregamos un link para enlazarnos al archivo estilo.css, y agregamos el link script
para librería.js, tal como se muestra
Agregar archivo estilos.css
Agregar el archivo
librería.js
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
27
En el body del _Layout, diseña los bloques y la cual se visualizará en todas las
páginas que utilicen esta pagina maestra. Guardar los cambios efectuados en el archivo.
Bloque
Bloque
Bloque Render
Bloque , el cual
está divido en dos
bloques
Agregando un Controlador al Proyecto
A continuación agregamos el controlador: En la carpeta Controllers, selecciona la opción
Agregar Controlador…, tal como se muestra en la figura.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
28
En la ventana Scafold, selecciona el tipo de controlador. Para nuestra aplicación
seleccionamos el controlador en blanco, tal como se muestra.
A continuación presionar el botón Agregar
Selecciona el controlador
en blanco
En la ventana Agregar controlador, asigne el nombre del controlador: PrincipalController, tal
como se muestra en la figura.
Presione el botón Agregar.
Action Inicio del
controlador Principal
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
29
En el controlador, se muestra el ActionResult Inicio(). A continuación vamos a agregar una vista
al Action.
Agregar vista al Action
Inicio()
En la ventana Agregar vista, se visualiza el nombre de la vista. No hacer cambios, por ahora.
Presiona el botón AGREGAR
Nombre de la Vista, la
plantilla es vacía
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
30
A continuación se muestra la Vista inicio.cshtml.
Realice los cambios a la vista, tal como se muestra en la figura
Agrega enlace a la
hoja de estilo
Ejecute proyecto, presiona la tecla Ctrl + F5, donde se visualiza la Vista y su diseño a través de
la pagina.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
31
Resumen
ASP.NET MVC es una implementación reciente de la arquitectura Modelo-Vista-Controlador
sobre la base ya existente del Framework ASP.NET otorgándonos de esta manera un sin fin
de funciones que son parte del ecosistema del Framework .NET.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
Uso del patrón Modelo-Vista-Controlador.
Facilidad para el uso de Unit Tests.
Uso correcto de estándares Web y REST.
Sistema eficiente de routing de links.
Control a fondo del HTML generado.
Uso de las mejores partes de ASP.NET.
El marco ASP.NET MVC ofrece las siguientes ventajas:
Es más fácil de gestionar una aplicación: modelo, la vista y el controlador.
No utiliza el estado de vista o formas basadas en servidor. Esto hace que el marco
idóneo MVC para los desarrolladores que quieren un control total sobre el
comportamiento de una aplicación.
Utiliza un patrón Front Controller que procesa las solicitudes de aplicaciones web a
través de un solo controlador.
Proporciona un mejor soporte para el desarrollo guiado por pruebas (TDD).
Funciona bien para las aplicaciones web que son apoyados por grandes equipos de
desarrolladores y diseñadores web que necesitan un alto grado de control sobre el
comportamiento de la aplicación.
El marco de trabajo basado en formularios Web ofrece las siguientes ventajas:
Es compatible con un modelo de eventos que conserva el estado a través de HTTP,
lo que beneficia el desarrollo de aplicaciones Web de línea de negocio.
Utiliza un patrón Controlador que añade funcionalidad a las páginas individuales.
Utiliza el estado de vista sobre las formas basadas en servidor, que puede hacer la
gestión de la información de estado más fácil.
Funciona bien para pequeños equipos de desarrolladores web y diseñadores que
quieren aprovechar el gran número de componentes disponibles para el desarrollo
rápido de aplicaciones.
El Modelo-Vista-Controlador (MVC) es un patrón arquitectónico que separa una aplicación
en tres componentes principales: el modelo, la vista y el controlador. El marco ASP.NET
MVC proporciona una alternativa al modelo de formularios Web Forms ASP.NET para crear
aplicaciones Web.
Entre las características de este patrón:
Soporte para la creación de aplicaciones para Facebook.
Soporte para proveedores de autenticación a través del OAuth Providers.
Plantillas por default renovadas, con un estilo mejorado.
Mejoras en el soporte para el patrón Inversion Of Control e integración con Unity
Mejoras en el ASP.NET Web Api, para dar soporte a las implementaciones basadas
en RESTful
Validaciones en lado del modelo
Uso de controladores Asíncronos
Soporte para el desarrollo de aplicaciones Web Móvil, totalmente compatible con los
navegadores de los modernos SmartPhone (Windows Phone, Apple y Android), etc.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o https://msdn.microsoft.com/es-es/library/dd410120(v=vs.100).aspx
o http://es.slideshare.net/ogensollen/desarrollo-de-aplicaciones-web-con-aspnet-mvc5
o http://nakedcode.net/?p=193
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
32
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
33
UNIDAD DE
APRENDIZAJE
1
INTRODUCCION AL ASP.NET
CORE MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno desarrolla interfaces de usuario para una aplicación
Web utilizando el patrón de diseño MVC.
TEMARIO
Tema 2: ASP.NET Core MVC (6 horas)
2.1 Plataforma ASP.NET MVC
2.2.2 Acciones del controlador
2.2.3 Implementando acciones (POST/GET)
2.3 Vistas
2.3.1 Sintaxis Razor y Scaffolding
2.3.2 ViewData y ViewBag
2.3.3 Enviar datos de los controladores a las vistas y controladores
2.3.4 Validaciones: ModelState, DataAnnotations
ACTIVIDADES PROPUESTAS
Los alumnos implementan un proyecto web utilizando en patrón de diseño Modelo
Vista Controlador.
Los alumnos desarrollan los laboratorios de esta semana
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
34
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
2.
35
ASP.NET CORE MVC
El modelo–vista–controlador (MVC) es un patrón de arquitectura de software que separa
los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo
encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la
construcción de tres componentes distintos que son el modelo, la vista y el controlador,
es decir, por un lado define componentes para la representación de la información, y por
otro lado para la interacción del usuario.
Este patrón de arquitectura de software se basa en las ideas de reutilización de código y
la separación de conceptos, características que buscan facilitar la tarea de desarrollo de
aplicaciones y su posterior mantenimiento
Figura: 1
Referencia: http://librosweb.es/libro/jobeet_1_4/capitulo_4/la_arquitectura_mvc.html
Los componentes del patrón MVC se podrían definir como sigue:
El Modelo: Es la representación de la información con la cual el sistema opera y
gestiona todos los accesos a la información, tanto consultas como actualizaciones,
implementando también los privilegios de acceso que se hayan descrito en las
especificaciones de la aplicación (lógica de negocio). Envía a la Vista aquella parte
de la información que en cada momento se le solicita para que sea mostrada
(típicamente a un usuario). Las peticiones de acceso o manipulación de información
llegan al Modelo a través del Controlador.
El Controlador: Responde a eventos (usualmente acciones del usuario) e invoca
peticiones al Modelo cuando se hace alguna solicitud sobre la información (por
ejemplo, editar un documento o un registro en una base de datos). También puede
enviar comandos a su Vista asociada si se solicita un cambio en la forma en que se
presenta el Modelo (por ejemplo, desplazamiento o scroll por un documento o por
los diferentes registros de una base de datos), por tanto se podría decir que el
Controlador hace de intermediario entre la Vista y el Modelo.
La Vista: Presenta el Modelo (información y lógica de negocio) en un formato
adecuado para interactuar (usualmente la interfaz de usuario) por tanto requiere de
dicho Modelo la información que debe representar como salida.
El diagrama del patrón MVC funciona de la siguiente manera:
El navegador realiza una petición a una determinada URL.
ASP.NET MVC recibe la petición y determinar el controlador que debe ejecutarse
(veremos más adelante como se realiza este proceso).
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
36
El controlador recibe la petición HTTP.
Procesa los datos, y crea u obtiene el modelo.
Retorna una vista, a la que normalmente le asigna el modelo (aunque no es
necesario establecer un modelo).
La vista que ha retornado el controlador, es interpretada por el motor de
renderización de ASP.NET MVC «Razor», que procesa la vista para generar el
documento HTML que será devuelto finalmente al navegador
El navegador muestra la página.
Nota: ASP.NET MVC dispone de varios motores de renderización – Razor, aspx, - ,
en este tutorial utilizaremos Razor.
Figura: 2
Referencia: http://www.devjoker.com/contenidos/articulos/525/Patron-MVC-Modelo-VistaControlador.aspx
El marco de ASP.NET MVC ofrece las siguientes características:
CIBERTEC
Separación de tareas: lógica de entrada, lógica de negocios e interfaz de usuario,
facilidad para pruebas y desarrollo basado en pruebas. Todos los contratos
principales del marco de MVC se basan en interfaz y se pueden probar mediante
objetos simulados que imitan el comportamiento de objetos reales en la aplicación.
Un marco extensible y conectable. Los componentes del marco de ASP.NET MVC
están diseñados para que se puedan reemplazar o personalizar con facilidad. Puede
conectar su propio motor de vista, directiva de enrutamiento de URL, serialización
de parámetros de método y acción, y otros componentes. El marco de ASP.NET
MVC también admite el uso de los modelos de contenedor Inyección de dependencia
(DI) e Inversión de control (IOC). DI permite insertar objetos en una clase, en lugar
de depender de que la clase cree el propio objeto. IOC especifica que si un objeto
requiere otro objeto, el primer objeto debe obtener el segundo objeto de un origen
externo como un archivo de configuración. Esto facilita las pruebas.
Amplia compatibilidad para el enrutamiento de ASP.NET, un eficaz componente de
asignación de direcciones URL que le permite compilar aplicaciones que tienen
direcciones URL comprensibles y que admiten búsquedas. Las direcciones URL no
tienen que incluir las extensiones de los nombres de archivo y están diseñadas para
admitir patrones de nombres de direcciones URL que funcionan bien para la
optimización del motor de búsqueda (SEO) y el direccionamiento de transferencia de
estado representacional (REST, Representational State Transfer).
Compatibilidad para usar el marcado en archivos de marcado de páginas de
ASP.NET existentes (archivos .aspx), de controles de usuario (archivos .ascx) y de
páginas maestras (archivos .master) como plantillas de vista. Puede usar las
características de ASP.NET existentes con el marco de ASP.NET MVC, tales como
páginas maestras anidadas, expresiones en línea (<%= %>), controles de servidor
declarativos, plantillas, enlace de datos, localización, etc.
Compatibilidad con las características de ASP.NET existentes. ASP.NET MVC le
permite usar características, tales como la autenticación de formularios y la
autenticación de Windows, la autorización para URL, la pertenencia y los roles, el
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
37
caching de resultados y datos, la administración de estados de sesión y perfil, el
seguimiento de estado, el sistema de configuración y la arquitectura de proveedor.
2.1 Plataforma ASP.NET MVC
ASP.NET MVC es la plataforma de desarrollo web de Microsoft basada en el conocido
patrón Modelo-Vista-Controlador. Está incluida en Visual Studio y aporta interesantes
características a la colección de herramientas del programador Web.
Figura: 3
Referencia: http://codigobase.com/el-porque-del-mvc-modelo-vista-controlador
Su arquitectura permite separar las responsabilidades de una aplicación Web en partes
diferenciadas y ofrece diversos beneficios:
Facilidad de mantenimiento
Facilidad para realizar testeo unitario y desarrollo orientado a pruebas.
URLs limpias, fáciles de recordar y adecuadas para buscadores.
Control absoluto sobre el HTML resultante generado, con la posibilidad de crear
webs "responsive" usando plantillas del framework Bootstrap de forma nativa.
Potente integración con jQuery y otras bibliotecas JavaScript.
Magnífico rendimiento y escalabilidad
Gran extensibilidad y flexibilidad
2.1.1 Acciones del controlador
En aplicaciones ASP.NET MVC se organiza en torno a los controladores y métodos de
acción. El controlador define los métodos de acción. Los controladores pueden incluir
tantos métodos de acción como sea necesario.
Los métodos de acción tienen normalmente una asignación unívoca con las
interacciones del usuario. Son ejemplos de interacciones del usuario especificar una
dirección URL en el explorador, hacer clic en un vínculo y enviar un formulario. Cada una
de estas interacciones del usuario produce el envío de una solicitud al servidor. En cada
caso, la dirección URL de la solicitud incluye información que el marco de MVC utiliza
para invocar un método de acción.
Cuando un usuario introduce una dirección URL en el explorador, la aplicación MVC usa
reglas de enrutamiento que están definidas en el archivo Global.asax para analizar la
dirección URL y determinar la ruta de acceso del controlador. A continuación, el
controlador determina el método de acción adecuado para administrar la solicitud. De
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
38
forma predeterminada, la dirección URL de una solicitud se trata como una subruta de
acceso que incluye el nombre del controlador seguido por el nombre de la acción.
Valores devueltos por el ActionResult
La mayoría de los métodos de acción devuelven una instancia de una clase que se deriva
de ActionResult. La clase ActionResult es la base de todos los resultados de acciones.
Sin embargo, hay tipos de resultados de acción diferentes, dependiendo de la tarea que
el método de acción esté realizando. Por ejemplo, la acción más frecuente consiste en
llamar al método View. El método View devuelve una instancia de la clase ViewResult,
que se deriva de ActionResult. En la siguiente tabla se muestran los tipos de resultado
de acción integrados y métodos auxiliares de acción que los devuelven.
Resultado de la acción
ViewResult
Método auxiliar
View
PartialViewResult
PartialView
RedirectResult
Redirect
RedirectToRouteResult
ContentResult
RedirectToAction
Content
JsonResult
JavaScriptResult
Json
JavaScript
FileResult
Fie
Descripción
Representa una vista como una página
web
Representa una vista parcial que define
una sección de la vista que se puede
representar dentro de otra vista
Redirecciona a otro método de acción
utilizando dirección URL.
Redirecciona a otro método de acción.
Devuelve un tipo de contenido definido
por el usuario
Devuelve un objeto JSON serializado
Devuelve un script que se puede
ejecutar en el cliente
Devuelve una salida binaria para
escribir en la respuesta
Parámetros de los métodos de acción
De forma predeterminada, los valores para los parámetros de los métodos de acción se
recuperan de la colección de datos de la solicitud. La colección de datos incluye los pares
nombre/valor para los datos del formulario, los valores de las cadenas de consulta y los
valores de las cookies.
La clase de controlador localiza el método de acción y determina los valores de
parámetro para el método de acción, basándose en la instancia RouteData y en los datos
del formulario. Si no se puede analizar el valor del parámetro, y si el tipo del parámetro
es un tipo de referencia o un tipo de valor que acepta valores NULL, se pasa null como
el valor de parámetro. De lo contrario, se producirá una excepción.
En el ejemplo siguiente, el parámetro id se asigna a un valor de solicitud que también se
denomina id. El método de acción no tiene que incluir el código para recibir un valor de
parámetro de la solicitud y el valor de parámetro es por consiguiente más fácil de utilizar.
El marco de MVC también admite argumentos opcionales para los métodos de acción.
Los parámetros opcionales en el marco de MVC se administran utilizando argumentos
de tipo que acepta valores NULL para los métodos de acción de controlador. Por ejemplo,
si un método puede tomar una fecha como parte de la cadena de consulta, pero desea
que el valor predeterminado sea la fecha de hoy si falta el parámetro de cadena de
consulta.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
39
Si la solicitud no incluye un valor para este parámetro, el argumento es null y el
controlador puede tomar las medidas que se requieran para administrar el parámetro
ausente.
2.1.2 Implementando acciones (POST/GET)
El uso de POST equivale al uso de formularios HTML. La principal diferencia entre enviar
datos via POST o via GET (es decir usando la URL, ya sea a través de querystring, o en
valores de ruta) es que con POST los datos circulan en el cuerpo de la petición y no son
visibles en la URL.
Añadir HttpPost
Cuando se envíe el formulario vía POST podemos obtener los datos y realizar
operaciones. La realidad es que una acción puede estar implementada por un solo
método por cada verbo HTTP, eso significa que para la misma acción (por lo tanto, la
misma URL) puedo tener dos métodos en el controlador: uno que se invoque a través de
GET y otro que se invoque a través de POST. Así pues podemos añadir el siguiente
método a nuestro controlador.
2.2 Vistas
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente
para encapsular la lógica de presentación. No deben contener lógica de aplicación ni
código de recuperación de base de datos. El controlador debe administrar toda la lógica
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
40
de aplicación. Una vista representa la interfaz de usuario adecuada usando los datos que
recibe del controlador. Estos datos se pasan a una vista desde un método de acción de
controlador usando el método View.
Las vistas en MVC ofrecen tres características adicionales de las cuales se puede
especificar: Create a strongly-typed view, Create as a parcial view y Use a layout or
master page
Creación de Vistas de Tipado Fuerte: Esta casilla se selecciona cuando la vista va
a estar relacionada a un Modelo y este objeto debe ser un parámetro de la acción en
el controlador.
Creacion de Vistas Parciales: Cuando es necesario reutilizar código HTLM en
diferentes partes del proyecto, se crea una vista de este tipo. Por ejemplo el menú
debe estar presente en gran parte de la aplicación, esta vista seria parcial y solo se
crearía una sola vez. Para crea una vista parcial se debe nombrar de la siguiente
forma: _NombreVistaParcial, la nombre se le debe anteponer el símbolo “_”. Ejemplo
_LoginPartial.cshtml ubicado en la carpeta /Views/Shared.
Usar como Plantilla o Pagina Maestra: Es una vista genérica de toda la aplicación,
es la que contendrá el llamado a los archivo JS y CSS. Las vistas de este tipo deben
cumplir con la misma regla para llamar el archivo, al nombre se le debe anteponer el
símbolo “_”. El llamado dinámico de las vistas por el Controlador se realiza por medio
de la función RenderBody().
2.2.1 Sintaxis Razor y Scaffolding
Scaffolding implica la creación de plantillas a través de los elementos del proyecto a
través de un método automatizado.
Los scaffolds generan páginas que se pueden usar y por las que se puede navegar, es
decir, implica la construcción de páginas CRUD. Los resultados que se aplica es ofrecer
una funcionalidad limitada.
La técnica scaffolding es un proceso de un solo sentido. No es posible volver a aplicar la
técnica scaffolding en los controladores y las vistas para reflejar un modelo sin
sobrescribir los cambios. Por lo tanto, se debe evaluar los módulos que se han
personalizado para saber a qué modelos se les puede volver a aplicar la técnica
scaffolding y a cuáles no.
Cuando tiene la clase del modelo listo, Scaffolding y la Vista permite realizar CRUD
(Create, Read, Update, Delete) operaciones. Todo lo que necesitas hacer es seleccionar
la plantilla scafold y el modelo de datos para generar los métodos de acción que se
implementarán en el controlador.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
41
Razor es una sintaxis basada en C# que permite usarse como motor de programación
en las vistas o plantillas de nuestros controladores.No es el único motor para trabajar con
ASP.NET MVC. Entre los motores disponibles destaco los más conocidos: Spark,
NHaml, Brail, StringTemplate o NVelocity, algunos de ellos son conversiones de otros
lenguajes de programación. En Razor el símbolo de la arroba (@) marca el inicio de
código de servidor.
El uso de la @ funciona de dos maneras básicas:
@expresión: Renderiza la expresión en el navegador. Así @item.Nombre muestra el
valor de ítem.Nombre.
@{ código }: Permite ejecutar un código que no genera salida HTML.
2.2.2 ViewData y ViewBag
El ViewData es un objeto del tipo diccionario (clave – valor) que no requiere instanciarse.
En este modelo se pueden pasar datos desde el controlador a la vista a través de una
clase diccionario “ViewDataDictionary”
El ViewBag es muy parecido a el ViewData, es un objeto tipo clave – valor pero se le
asigna de manera diferente. En este modelo no requiere ser casteados.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
42
El ViewModel permite para pasar información de una acción de un controlador a una
vista. Esta propiedad Model no funciona como las anteriores, sino que lo que se pasa es
un objeto, que se manda de la acción hacia la vista.
Cuando usamos Model para acceder a los datos, en lugar de ViewData o ViewBag,
definimos en la primera línea, @model. Esa línea le indica al framework de que tipo es
el objeto que la vista recibe del controlador (es decir, de que tipo es la propiedad Model).
A diferencia de ViewData y ViewBag que existen tanto en el controlador como en la
vista, el controlador no tiene una propiedad Model. En su lugar se usa una sobrecarga
del método View() y se manda el objeto como parámetro
2.2.3 Enviar datos de los controladores a las vistas y controladores
Para pasar datos a la vista, se utiliza la propiedad ViewData y ViewBag.
Un método de acción puede almacenar los datos en el objeto TempDataDictionary del
controlador antes de llamar al método RedirectToAction del controlador para invocar la
acción siguiente. La propiedad TempData almacena el estado de la sesión. Los métodos
de acción que se llaman después de que se haya establecido el valor de
TempDataDictionary pueden obtener los valores de objeto y, a continuación,
procesarlos o mostrarlos. El valor de TempData se conserva hasta que se lee o hasta
que se agota el tiempo de espera de la sesión.
Session es la forma de persistir datos mientras la sesión actual esté activa. Esto nos
permite acceder a datos desde múltiples controladores, acciones y vistas. El acceso y a
una variable de Session es igual que a una variable de TempData:
Existen 3 modos de sesión en ASP.NET:
InProc: Se guarda en el propio servidor web y no se comparte entre otros servidores
de una misma web farm.
StateServer: Se guarda en un servidor único y se comparte entre otros servidores de
una misma web farm, pero si se cae el servidor de sesión, se cae toda la aplicación.
SQLServer: Se guarda en la base de datos, es menos performante y difícil de escalar.
2.2.4 Validaciones: ModelState, DataAnnotations
El espacio de nombres System.ComponentModel.DataAnnotations, nos proporciona
una serie de clases, atributos y métodos para realizar validación dentro de nuestros
programas en .NET.
Cuando se utiliza el Modelo de Datos Anotaciones Binder, utiliza atributos validador para
realizar la validación. El namespace System.ComponentModel.DataAnnotations
incluye los siguientes atributos de validación:
Rango - Permite validar si el valor de una propiedad se sitúa entre un rango
específico de valores.
ReqularExpression - Permite validar si el valor de una propiedad coincide con un
patrón de expresión regular especificada.
Requerido - Le permite marcar una propiedad según sea necesario.
StringLength - Le permite especificar una longitud máxima para una propiedad de
cadena.
Validación - La clase base para todos los atributos de validación.
Tipos de atributos
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
43
ErrorMessage, es una propiedad de esta clase que heredaran todos nuestros atributos
de validación y que es importante señalar ya que en ella podremos customizar el mensaje
que arrojará la validación cuando esta propiedad no pase la misma.
Esta propiedad tiene un ‘FormatString’ implícito por el cual mediante la notación
estándar de ‘FormatString’ podemos referirnos primero al nombre de la propiedad y
después a los respectivos parámetros.
MaxLenghAttribute y MinLenghAttribute
Estos atributos fueron añadidos para la versión de Entity Framework 4.1.
Especifican el tamaño máximo y mínimo de elementos de una propiedad de tipo array.
Es importante señalar que MaxLenghtAttribute y MinLengthAttribute son utilizados
por EF para la validación en el lado del servidor y estos se diferencian del
StringLengthAttribute, que utilizan un atributo para cada validación, y no solo sirven
para validar tamaños de string, sino que también validan tamaños de arrays.
RegularExpressionAttribute
Especifica una restricción mediante una expresión regular
RequieredAttribute
Especifica que el campo es un valor obligatorio y no puede contener un valor null o string.
RangeAttribute
Especifica restricciones de rango de valores para un tipo específico de datos
DataTypeAttribute
Especifica el tipo de dato del atributo.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
44
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
45
Laboratorio 2.1
Creando una aplicación ASP.NET MVC
Implemente un proyecto ASP.NET MVC donde permita listar y registrar los productos desde la
web. Valide los datos del producto utilizando anotaciones.
Creando el proyecto
Iniciamos Visual Studio 2015 y creamos un nuevo proyecto:
1. Seleccionar el proyecto Web.
2. Seleccionar el FrameWork: 4.5.2
3. Seleccionar la plantilla Aplicación web de ASP.NET
4. Asignar el nombre del proyecto
5. Presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre y ubicación
del proyecto
A continuación, seleccionar la plantilla del proyecto MVC. Presiona el botón ACEPTAR
Selecciona la
plantilla
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
46
Trabajando con el Modelo
Primero, creamos una clase en la carpeta Models: Agregar una clase llamada Producto, tal como
se muestra
Selecciona la
opción
En la ventana Agregar nuevo elemento, selecciona el elemento Clase y asigne el nombre:
Producto, presiona el botón Agregar
Selecciona el
elemento
Asigne su nombre
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
47
En la clase importar la librería de Anotaciones y Validaciones
Importar la librería
En la clase Producto, primero, defina la estructura de datos de la clase, tal como se muestra.
Estructura de datos de
la clase
A continuación validamos el campo código: no debe estar vacío y su formato es P99999, tal como
se muestra
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
48
Luego validamos el campo descripción: no debe estar vacío y la longitud minima de caracteres
es 10, tal como se muestra
Continuamos con la validación del campo umedida, el cual será obligatorio, y asignamos el
nombre a visualizar (DisplayName), importar la librería System.ComponentModel
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
49
Luego validamos el campo preUni: asignar un Nombre para visualizarlo, indicar que el campo
obligatorio y solo debe contener dos decimales (RegularExpression) y su rango de valores se
encuentra entre 1 al valor máximo del tipo de dato.
Y por ultimo validamos el campo stock: asignamos un nombre, campo obligatorio y cuyo rango
de valores es 1 hasta el valor máximo del tipo de dato
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
50
A continuación agregar en la carpeta Controller un controlador, tal como se muestra
En la ventana Scafold, selecciona el controlar MVC 5 en blanco, tal como se muestra
Seleccionar
A continuación ingrese el nombre del Controlador, presiona al botón Agregar
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
51
En la ventana de código PrincipalController:
Importar la carpeta Models, la cual almacena la clase Producto
Definir una lista de Producto, a nivel controlador
Importar la librería
Defina la lista de
Producto
En el ActionResult Index(), enviar a la vista la lista de Producto, llamado Inventario.
La sintaxis es:
static List
Inventario = new List();
Enviar a la Vista la
colección
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
52
A continuación agregar una Vista a la acción Index: hacer click derecho a la acción y selecciona
Agregar Vista, tal como se muestra
Selecciona la opción
para crear una Vista
En la ventana Agregar Vista, aparece el nombre de la Vista: Index. No cambiar el nombre de la
vista.
Selecciona la plantilla: List
Selecciona la clase de modelo: Producto, el cual listaremos los productos almacenados en
la colección.
Presionar el botón Agregar
Selecciona la plantilla y
el modelo
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
53
Generada la Vista, se visualiza tal como se muestra.
Defina la estructura de
datos que recibe
Cabecera de la lista
Visualiza cada registro
de la colección
Ejecute la Vista Ctrl + F5, visualizando la ventana Index.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
54
En el controlador Principal, defina la acción Create, el cual envía la estructura de la clase
Producto, y recibe los datos para ser validados y agregados a la colección.
Action que envía un
nuevo Producto
Action que recibe el
registro y lo agrega a la
colección
Definida la acción Create, agregar una vista: hacer click derecho a la acción y seleccionar la
opción Agregar Vista, tal como se muestra
Opción para agregar
una Vista
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
55
En la ventana Agregar Vista, aparece el nombre de la Vista: Create. No cambiar el nombre de la
vista.
Selecciona la plantilla: Create
Selecciona la clase de modelo: Producto, el cual ingresamos los datos de un producto a la
página.
Presiona el botón Agregar
Selecciona la plantilla
Create y el modelo
Producto
Página Create creada por la plantilla Create.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
56
Ejecuta el proyecto, ingresar a la vista Create, los datos de los productos. Sus campos se
encuentran validados desde la definición de la clase, tal como se muestra.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
57
Laboratorio 2.2
Creando una aplicación ASP.NET MVC - RAZOR
Del proyecto ASP.NET MVC anterior, el cual permite listar y registrar los productos desde la web,
implemente los mismos procesos utilizando Lenguaje Razor.
Trabajando con el Controlador
Desde el mismo proyecto, creamos el controlador Principal.
En esta página hacemos una referencia a la carpeta Models, y definimos la colección de tipo List
llamada Inventario.
Colección Inventario de
tipo List
En el controlador, defina la vista Listado(), el cual envía a la Vista la lista de la colección
Inventario (Inventario.ToList()), a través del ViewData.
Almaceno en un
ViewData la colección
Inventario
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
58
A continuación agregamos la Vista al Action Listado. Observe que la plantilla debe ser vacía
(Empty). Presiona el botón Agregar
Selecciona la plantilla
vacía.
En la vista, primero importamos la carpeta Models, porque utilizamos la clase Producto en el
proceso del Listado.
A continuación declaramos variables en el proceso: productos el cual recibe la lista almacenada
en el ViewBag; una variable st (sub total) y una variable c de tipo enter
Referenciar la carpeta Models
Declaración de
variables
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
59
A continuación implementamos el proceso del listado a través de una etiqueta , tal
como se muestra. Para leer cada registro utilizamos el comando foreach para visualizar cada
registro.
Cabecera de la lista
Leer cada registro e
imprimir sus valores
Guarde el proyecto y ejecuta la pagina Ctrl + F5, donde se visualiza la pagina en blanco
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
60
A continuación defina el ActionResult Nuevo, para enviar un Registro y recibir el registro para
almacenar en la colección, tal como se muestra
Action que envía un
nuevo Producto
Action que recibe la instancia
de Producto y lo almacena en
la coleccion
A continuación defina su vista: su plantilla es Create y el modelo es Producto
Defina la plantilla y
selecciona el modelo
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
61
Vista de la página Nuevo.cshtml, tal como se muestra.
Guarde la Vista, para ejecutar presiona Ctrl + F5, ingrese los datos, al presionar el botón
Create nos direccionamos a la pagina Listado, visualizando el registro agregado
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
62
Resumen
El modelo–vista–controlador (MVC) es un patrón de arquitectura de software que separa los
datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo
encargado de gestionar los eventos y las comunicaciones.
Entre las características más destacables de ASP.NET MVC tenemos las siguientes:
El Modelo: Es la representación de la información con la cual el sistema opera, por lo
tanto gestiona todos los accesos a dicha información, tanto consultas como
actualizaciones, implementando también los privilegios de acceso que se hayan descrito
en las especificaciones de la aplicación (lógica de negocio).
El Controlador: Responde a eventos (usualmente acciones del usuario) e invoca
peticiones al 'modelo' cuando se hace alguna solicitud sobre la información (por ejemplo,
editar un documento o un registro en una base de datos).
La Vista: Presenta el 'modelo' (información y lógica de negocio) en un formato adecuado
para interactuar (usualmente la interfaz de usuario) por tanto requiere de dicho 'modelo'
la información que debe representar como salida.
ASP.NET MVC es la plataforma de desarrollo web de Microsoft basada en el conocido
patrón Modelo-Vista-Controlador. Está incluida en Visual Studio y aporta interesantes
características a la colección de herramientas del programador Web.
Cuando creamos una aplicación ASP.NET MVC se define una tabla de enrutamiento que se
encarga de decidir que controlador gestiona cada petición Web basándose en la URL de
dicha petición.
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente para
encapsular la lógica de presentación. No deben contener lógica de aplicación ni código de
recuperación de base de datos. El controlador debe administrar toda la lógica de aplicación.
Una vista representa la interfaz de usuario adecuada usando los datos que recibe del
controlador.
Scaffolding implica la creación de plantillas a través de los elementos del proyecto a través
de un método automatizado.
Razor es una sintaxis basada en C# que permite usarse como motor de programación en
las vistas de nuestros controladores.No es el único motor para trabajar con ASP.NET MVC.
El espacio de nombres System.ComponentModel.DataAnnotations, nos proporciona una
serie de clases, atributos y métodos para validar dentro de nuestros programas en .NET.
El marco de ASP.NET MVC asigna direcciones URL a las clases a las que se hace
referencia como controladores. Los controladores procesan solicitudes entrantes,
controlan los datos proporcionados por el usuario y las interacciones y ejecutan la lógica de
la aplicación adecuada.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
http://www.vitaminasdev.com/Recursos/8/asp-net-mvc-vs-asp-net-webforms
http://librosweb.es/libro/jobeet_1_4/capitulo_4/la_arquitectura_mvc.html
http://www.devjoker.com/contenidos/articulos/525/Patron-MVC-Modelo-VistaControlador.aspx
https://msdn.microsoft.com/es-es/library/dd381412(v=vs.108).aspx
https://amatiasbaldi.wordpress.com/2012/05/16/microsoft-mvc4/
http://www.forosdelweb.com/f179/jquery-c-mvc-crear-objeto-json-enviarlo-action-delcontrolador-1082637/
http://www.mug-it.org.ar/343016-Comunicando-cliente-y-servidor-con-jQuery-enASPnet-MVC3.note.aspx
https://danielggarcia.wordpress.com/2013/11/12/el-controlador-en-asp-net-mvc-4-ienrutado/
http://www.desarrolloweb.com/articulos/pasar-datos-controladores-vistas-dotnet.html
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
63
UNIDAD DE
APRENDIZAJE
2
TRABAJANDO CON DATOS EN
ASP.NET MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno desarrolla aplicaciones con acceso a datos teniendo
implementando procesos de consulta y actualización de datos
TEMARIO
Tema 3: Introducción a ADO.NET (1 horas)
1. Arquitectura del ADO.NET
2. Manejando una cadena de conexión a un origen de datos utilizando
ConfigurationManager
ACTIVIDADES PROPUESTAS
Los alumnos implementan un proyecto web utilizando en patrón de diseño Modelo
Vista Controlador.
Los alumnos desarrollan los laboratorios de esta semana
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
64
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
3.
65
INTRODUCCION ADO.NET
Cuando desarrolle aplicaciones con ADO.NET contará con diferentes requisitos para
trabajar con datos. En algunos casos, puede que simplemente desee realizar una consulta
de datos en un formulario; en otros casos necesita actualizar los datos.
Independientemente de lo que haga con los datos, hay ciertos conceptos fundamentales
que debe de comprender acerca del enfoque de los datos en ADO.NET, los cuales los
trataremos en este primer capítulo del manual.
3.1 ARQUITECTURA Y PROVEEDORES DE DATOS
Tradicionalmente, el procesamiento de datos ha dependido principalmente de un modelo
de dos niveles basado en una conexión. A medida que aumenta el uso que hace el
procesamiento de datos de arquitecturas de varios niveles, los programadores están
pasando a un enfoque sin conexión con el fin de proporcionar una mejor escalabilidad a
sus aplicaciones.
Arquitectura de ADO.NET
Figura 1: Arquitectura de ADO.NET
Referencia: hampprogramandoando.blogspot.com
Componentes de ADO.NET
Los dos componente principales de ADO.NET para el acceso a datos y su manipulación
son los proveedores de datos .NET Fraework y DataSet.
LINQ to SQL
LINQ to SQL admite consultas en un modelo de objetos asignado a las estructuras de
datos de una base de datos relacional sin utilizar un modelo conceptual intermedio. Cada
tabla se representa mediante una clase distinta, acoplando de manera precisa el modelo
de objetos al esquema de la base de datos relacional. LINQ to SQL traduce Languageintegrated queries del modelo de objetos a Transact-SQL y lo envía a la base de datos
para su ejecución. Cuando la base de datos devuelve los resultados, LINQ to SQL los
vuelve a traducir a objetos.
ADO.NET Entity Framework
ADO.NET Entity Framework está diseñado para permitir que los desarrolladores creen
aplicaciones de acceso a los datos programando en un modelo de aplicación conceptual
en lugar de programar directamente en un esquema de almacenamiento relacional. El
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
66
objetivo es reducir la cantidad de código y mantenimiento que se necesita para las
aplicaciones orientadas a datos
WCF Data Services
Describe cómo se usa Servicios de datos de WCF para implementar servicios de datos en
web o en una intranet. Los datos se estructuran como entidades y relaciones de acuerdo a
las especificaciones de Entity Data Model. Los datos implementados en este modelo se
pueden direccionar mediante el protocolo HTTP estándar
XML Y ADO.NET
ADO.NET aprovecha la eficacia de XML para proporcionar acceso a datos sin conexión.
ADO.NET fue diseñado teniendo en cuenta las clases de XML incluidas en .NET
Framework; ambos son componentes de una única arquitectura.
PROVEEDORES DE DATOS ADO.NET
Los proveedores de datos .NET Framework sirven para conectarse a una base de datos,
ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente, se
colocan en un DataSet con el fin de que el usuario pueda verlos cuando los necesite, se
combinan con datos de varios orígenes o se utilizan de forma remota entre niveles. Los
proveedores de datos .NET Framework son ligeros, de manera que crean un nivel mínimo
entre el origen de datos y el código, con lo que aumenta el rendimiento sin sacrificar
funcionalidad.
En la tabla siguiente se muestran los proveedores de datos .NET que se incluyen en el
Framework .NET
Proveedor de Datos .NET
Descripción
.NET Framework Proveedor de datos
para SQL Server
Proveedor de datos .NET Framework
para OLE DB
Proporciona acceso a datos para Microsoft SQL
Server. Utiliza la librería System.Data.SqlClient.
Para orígenes de datos que se exponen
mediante OLE DB. Utiliza la librería
System.Data.OleDb.
Proveedor de datos .NET Framework Para orígenes de datos que se exponen
para ODBC
mediante
ODBC.
Utiliza
la
librería
System.Data.Odbc.
Proveedor de datos .NET Framework Para orígenes de datos de Oracle. El proveedor
para Oracle
de datos .NET Framework para Oracle es
compatible con la versión 8.1.7 y posteriores
del software de cliente de Oracle y utiliza la
librería System.Data.OracleClient.
Proveedor EntityClient
Proporciona acceso a datos para las
aplicaciones de Entity Data Model. Utiliza la
librería System.Data.EntityClient.
Los cuatro objetos centrales que constityen un proveedor de datos de .NET Framework
son:
Objeto
Descripción
Connection
Establece una conexión a una fuente de datos.
La clase base para todos los objetos
Connection es DbConnection.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
Command
DataReader
DataAdapter
67
Ejecuta un comando en una fuente de datos.
Expone Parameters y puede ejecutarse en el
ámbito de un objeto Transaction desde
Connection. La clase base para todos los
objetos Command es DbCommand.
Lee un flujo de datos de solo avance y solo
lectura desde una fuente de datos. La clase
base para todos los objetos DataReader es
DbDataReader.
Llena un DataSet y realiza las actualizaciones
necesarias en una fuente de datos. La clase
base para todos los objetos DataAdapter es
DbDataAdapter.
Objeto
Descripción
Transaction
Incluye operaciones de actualización en las
transacciones que se realizan en el origen de datos.
ADO.NET es también compatible con las
transacciones que usan clases en el espacio de
nombres System.Transactions.
Un objeto auxiliar 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 la que puede
rellenar la colección Parameters de un objeto
Command.
Define los parámetros de entrada y salida para los
comandos y procedimientos almacenados
Un objeto auxiliar que proporciona un modo
sencillo de crear y administrar el contenido de las
cadenas de conexión utilizadas por los objetos
Connection.
Se devuelve cuando se detecta un error en el origen
de dato
Se proporciona para los atributos de seguridad de
acceso del código de los proveedores de datos
CommandBuilder
Parameter
ConnectionStringBuilder
Exception
ClientPermission
DATASET EN ADO.NET
El objeto DataSet es esencial para la compatibilidad con escenarios de datos distribuidos
desconectados con ADO.NET.
El objeto DataSet es una representación residente en memoria de datos que proporciona
un modelo de programación relacional coherente independientemente del origen de datos.
Se puede utilizar con muchos y distintos orígenes de datos, con datos XML o para
administrar datos locales de la aplicación.
El DataSet representa un conjunto completo de datos que incluye tablas relacionadas y
restricciones, así como relaciones entre las tablas. En la siguiente ilustración se muestra el
modelo de objetos DataSet.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
68
Figura 2: DataSet
Referencia: edn.embarcadero.com
Figura 3: DataSet y Componenets
Referencia: www.c-sharpcorner.com
3.2 MANEJANDO UNA CADENA DE CONEXIÓN A UN ORIGEN DE DATOS
En ADO.NET se utiliza un objeto Connection para conectar con un determinado origen de
datos mediante una cadena de conexión en la que se proporciona la información de
autenticación necesaria. El objeto Connection utilizado depende del tipo de origen de
datos.
Cada proveedor de datos .NET Framework incluye un objeto Connection:
•
Proveedor de datos para OLE DB incluye un objeto OleDbConnection,
•
Proveedor de datos para SQL Server incluye un objeto SqlConnection,
•
Proveedor de datos para ODBC incluye un objeto OdbcConnection y
•
Proveedor de datos para Oracle incluye un objeto OracleConnection.
Conectar a SQL Server mediante ADO.NET
Para conectarse a Microsoft SQL Server 7.0 o posterior, utilice el objeto SqlConnection del
proveedor de datos .NET Framework para SQL Server. El proveedor de datos .NET
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
69
Framework para SQL Server admite un formato de cadena de conexión que es similar al
de OLE DB (ADO).
En el ejemplo siguiente se muestra la forma de crear un abrir una conexión a un origen de
datos en SQL Server
SqlConnection cn = new SqlConnection(“ Data Source=(local); Initial Catalog=NorthWind;
user id=sa; pwd=sql”);
cn.Open()
Donde:
Data Source: Origen de datos
Initial Catalog=Nombre de la base de datos
User id=usuario
Pwd=clave
Cerrar una Conexión
Debe cerrar siempre el objeto Connection cuando deje de usarlo. Esta operación se puede
realizar mediante los métodos Close o Dispose del objeto Connection.
Las conexiones no se liberan automáticamente cuando el objeto Connection queda fuera
de ámbito o es reclamado por el garbageCollector.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
70
Laboratorio 01
Consulta de Datos
Implemente un proyecto ASP.NET MVC, diseñe una página que permita listar los
registros de la tabla tb_clientes de la base de datos Negocios2018
Creando el proyecto
Iniciamos Visual Studio; seleccionar el proyecto Web; selecciona la plantilla Aplicación
web ASP.NET (.NET Framework), asignar el nombre y ubicación del proyecto; y
presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre y ubicación
del proyecto
A continuación, seleccionar la plantilla del proyecto MVC.
Selecciona la
plantilla
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
71
Creando la Clase del Modelo
Para efectuar y realizar la consulta de los datos de la tabla tb_clientes, agregamos, en
la carpeta Models, una clase, tal como se muestra.
Asigne el nombre de la clase, la cual se llamará tb_clientes, tal como se muestra.
Presiona el botón AGREGAR
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
72
Para iniciar, agregamos la referencia DataAnnotations, luego defina los atributos de la
clase, visualizando el texto y orden de cada uno de ellos [Display (Name=”texto”,
Order=”n”)], tal como se muestra.
Agregar referencia
Atributos de la
clase
Terminado con el proceso de la definición de la clase, el siguiente paso es el
desarrollo del controlador y su vista
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
73
Creando un Controlador
A continuación, creamos un controlador: Desde la carpeta Controllers, selecciona la
opción Agregar, Controlador…, tal como se muestra.
Selecciona
Selecciona el scaffold, Controlador de MVC5: en blanco, presiona el botón AGREGAR
Selecciona
Asigne el nombre del controlador: NegociosController, tal como se muestra
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
74
Referenciar la carpeta Models, y la librería Data.SqlClient tal como se muestra.
Referenciar las librerías
Dentro del controlador, defina la conexión a la base de datos Negocios2018
instanciando el SqlConnection; luego defina una lista donde retornará los registros de
tb_clientes
Defina la conexión
Defina una Lista de clientes
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
75
A continuación codifique la lista llamada Clientes:
1. Ejecuta la sentencia SQL a través del SqlCommand, almacenando los resultados en
el SqlDataReader.
2. Para guardar los resultados en el temporal se realiza a través de un bucle (mientras
se pueda leer: dr.Read()), vamos almacenando cada registro en el temporal.
3. Cerrar los objetos y enviar el objeto lista llamada temporal.
Método Clientes()
Defina el ActionResult ListadoClientes(), el cual enviará a la Vista el resultado del
método Clientes(), tal como se muestra.
ActionResult donde envía a la
vista la lista de clientes
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
76
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será List; y la clase de modelo la
cual es tb_clientes, tal como se muestra
Selecciona la plantilla
Selecciona la clase
Vista generada por la plantilla List, tal como se muestra
Recibe la lista de clientes
Cabecera de la lista
Registros que se
visualizaran en la Vista
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
77
Ejecutamos la Vista, visualizando los registros de la tabla tb_clientes
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
78
Resumen
Los objetos en el modelo de datos representan clases que interactúan con una base de
datos. Normalmente, se puede pensar en el modelo de datos como el conjunto de las clases
creadas por herramientas como Entity Framework (EF)
La clase principal que es responsable de la interacción con datos como objetos es
System.Data.Entity.DbContext (a menudo referido como contexto). La clase de contexto
gestiona la entidad objetos en tiempo de ejecución, que incluye rellenar objetos con datos de
una base de datos, el control de cambios, y la persistencia de los datos a la base de datos.
El método recomendado para trabajar con el contexto es definir una clase que deriva de
DbContext y expone DbSet propiedades que representan las colecciones de las entidades
especificadas en el contexto. Si está trabajando con el Diseñador del Entity Framework, el
contexto se generará automáticamente. Si está trabajando con el Código Primero,
normalmente escribe el contexto mismo.
Los selectores permiten obtener el contenido del documento para ser manipularlo. Al
utilizarlos, los selectores retornan un arreglo de objetos que coinciden con los criterios
especificados. Este arreglo no es un conjunto de objetos del DOM, son objetos de jQuery
con un gran número de funciones y propiedades predefinidas para realizar operaciones con
los mismos.
Entity Framework es un conjunto de herramientas incluidas en ADO.NET que dan soporte
para el Desarrollo de Aplicaciones orientadas a datos. Arquitectos y desarrolladores de
aplicaciones orientadas a datos se debaten con la necesidad de realizar dos diferentes
objetivos.
Las expresiones lambda son funciones anónimas que devuelven un valor. Se pueden utilizar
en cualquier lugar en el que se pueda utilizar un delegado. Son de gran utilidad para escribir
métodos breves que se pueden pasar como parámetro.
Las expresiones lambda se declaran en el momento en el que se van a usar como parámetro
para una función.
Las expresiones lambda son utilizadas ampliamente en Entity Framework. Cuando
realizamos una consulta del tipo
var consulta = post.Where(p => p.User == "admin");
La cláusula Where tiene como parámetro una expresión lambda. La operación descrita para
recuperar los posts del usuario admin se almacenará como una estructura de datos que
podemos pasar entre capas como parámetro de métodos. Esta expresión la analizará y
ejecutará el proveedor de datos que se está usando y la convertirá en código SQL para
realizar la consulta contra la base de datos.
Los objetos de un contexto del objeto son instancias de tipos de entidad que representan
los datos en el origen de datos. Puede modificar, crear y eliminar objetos de un contexto y
Entity Framework realizará el seguimiento de los cambios efectuados en estos objetos.
Cuando se llama al método SaveChanges, Entity Framework genera y ejecuta comandos
que llevan a cabo instrucciones equivalentes de inserción, actualización o eliminación con el
origen de datos.
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o http://dawconsblog.blogspot.com/2014/04/tutorial-crud-con-mvc-y-entityframework_14.html
o https://translate.google.com.pe/translate?hl=es&sl=en&u=https://msdn.microsoft.co
m/en-us/data/jj729737.aspx&prev=search
o http://speakingin.net/2007/11/18/aspnet-mvc-framework-primera-parte/
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
79
UNIDAD DE
APRENDIZAJE
2
TRABAJANDO CON DATOS EN
ASP.NET MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno desarrolla aplicaciones con acceso a datos teniendo
implementando procesos de consulta y actualización de datos
TEMARIO
Tema 4: Recuperación de datos (7 horas)
4.1 La clase DataReader: realizando consulta de datos.
4.2 Consulta de datos utilizando parámetros con DataReader.
4.3 Trabajando con Vistas
ACTIVIDADES PROPUESTAS
Los alumnos implementan un proyecto web utilizando en patrón de diseño Modelo
Vista Controlador.
Los alumnos desarrollan los laboratorios de esta semana
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
80
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
4.
81
RECUPERACIÓN DE DATOS
La función principal de cualquier aplicación que trabaje con una fuente de datos es
conectarse a dicha fuente de datos y recuperar los datos que se almacenan.
Los proveedores de .NET Framework para ADO.NET sirven como puente entre una
aplicación y un origen de datos, permitiendo ejecutar instrucciones SQL para recuperar
datos mediante el DataAdapter o el DataReader.
4.1 REALIZANDO UNA CONSULTA CON DATAADAPTER
La clase DataAdapter se encarga de las operaciones entre la capa de datos y la capa
intermedia donde los datos son transferidos. Se puede decir que sirve como puesnte
entre un objeto DataSet y un origen de datos asociados para recuperar y guardar datos.
Básicamente, permite rellenar (Fill) el objeto DataSet para que sus datos coincidan con
los del origen de datos y permite actualizar (Update) el origen de datos para que sus
datos coincidan con los del DataSet.
Figura 1: Diagrama del objeto DataAdapter
Referencia: http://ehu.es/mrodriguez/archivos/csharppdf/ADONET/ADONET.pdf
Los constructores de la clase son:
DataAdapter (Command selectCommand). Utiliza un comando de selección como
parámetro.
DataAdapter (string selectText, string selectConnectionString). Se utiliza una
sentencia SQL de selección y una cadena de conexión como parámetros
DataAdapter (string selectText, Connection selectConnection). Se utiliza los
parámetros sentencia SQL de selección y un objeto de tipo conexión.
En la interface IDataAdapter se declaran los siguientes métodos (toda clase que
implemente esta interface está obligata a implementarlos)
Fill (DataSet). Rellena un objeto de la clase DataSet
FillSchema (Dataset, Tipo de schema). Rellena un esquema con un DataSet
indicando el tipo de esquema a rellenar
Update (DataSet). Actualiza el DataSet correspondiente
GetFillParameters(). Recoge el conjunto de parámetros cuando se ejecuta una
consulta de selección.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
82
Cada proveedor de datos de .NET FrameWork cuenta con un objeto DataAdapter:
Proveedor
OledbDataAdapter
SqlDataAdapter
OdbcDataAdapter
OracleDataAdapter
Descripcion
Proveedor de datos para OLEDB
Proveedor de datos para SQL
Server
Proveedor de datos para ODBC
Proveedor de datos para Oracle
REALIZANDO UNA CONSULTA CON PARÀMETROS
Cuando el DataAdapter ejecuta instrucciones de consulta con parámetros, se deben
definen qué parámetros de entrada y de salida se deben crear. Para crear un parámetro
en
un
DataAdapter,
se
utiliza
el
método:
Parameters.Add()
o
Parameteres.AddWithValue().
El método Parameters.Add() se debe especificar el nombre de columna, tipo de datos
y tamaño, asignando el valor del parámetro definido. El método Add de la colección
Parameters toma el nombre del parámetro, el tipo de datos, el tamaño (si corresponde
al tipo) y el nombre de la propiedad SourceColumn de DataTable
El método Parameters.AddWithValue() se debe especificar el nombre del parámetro y
su valor.
4.2
TRABAJANDO CON DATAREADER
La recuperación de datos mediante DataReader implica crear una instancia del objeto
Command y de un DataReader a continuación, para lo cual se llama a
Command.ExecuteReader a fin de recuperar filas de un origen de datos.
Figura 1: Diagrama del objeto DataReader
Referencia: http://www.dotnetero.com/2006/08/adonet-para-novatos.html
Puede utilizar el método Read del objeto DataReader para 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 DataReader y que
permiten tener acceso a los valores de las columnas en sus tipos de datos nativos
(GetDateTime, GetDouble, GetGuid, GetInt32, etc.).
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
83
Para obtener una lista de métodos de descriptor de acceso con tipo para DataReaders
de proveedores de datos:
Proveedor
OledbDataReader
SqlDataReader
OdbcDataReader
OracleDataReader
Descripcion
Proveedor de datos para OLEDB
Proveedor de datos para SQL
Server
Proveedor de datos para ODBC
Proveedor de datos para Oracle
Cerrar el DataReader
Siempre debe llamar al método Close cuando haya terminado de utilizar el objeto
DataReader.
Si Command contiene parámetros de salida o valores devueltos, éstos no estarán
disponibles hasta que se cierre el DataReader.
Tenga en cuenta que mientras está abierto un DataReader, ese DataReader utiliza de
forma exclusiva el objeto Connection. No se podrá ejecutar ningún comando para el
objeto Connection hasta que se cierre el DataReader original, incluida la creación de
otro DataReader.
Recuperar varios conjuntos de resultados con NextResult
En el caso en que se devuelvan varios resultados, el DataReader proporciona el método
NextResult para recorrer los conjuntos de resultados en orden.
Obtener información del esquema a partir del DataReader
Mientras hay abierto un DataReader, puede utilizar el método GetSchemaTable para
recuperar información del esquema acerca del conjunto actual de resultados.
GetSchemaTable devuelve un objeto DataTable rellenado con filas y columnas que
contienen la información del esquema del conjunto actual de resultados.
DataTable contiene una fila por cada una de las columnas del conjunto de resultados.
Cada columna de una fila de la tabla de esquema está asociada a una propiedad de la
columna que se devuelve en el conjunto de resultados. ColumnName es el nombre de
la propiedad y el valor de la columna es el de la propiedad. En el ejemplo de código
siguiente se muestra la información del esquema de DataReader.
4.3 TRABAJANDO CON VISTAS Y CONSULTA DE DATOS
El marco de ASP.NET MVC admite el uso de un motor de vista para generar las vistas
(interfaz de usuario). De forma predeterminada, el marco de MVC usa tipos
personalizados (ViewPage, ViewMasterPage y ViewUserControl) que heredan de los
tipos de página ASP.NET existente (.aspx), página maestra (.master), y control de
usuario (.ascx) existentes como vistas.
En el flujo de trabajo típico de una aplicación web de MVC, los métodos de acción de
controlador administran una solicitud web de entrada. Estos métodos de acción usan los
valores de parámetro de entrada para ejecutar el código de aplicación y recuperar o
actualizar los objetos del modelo de datos de una base de datos.
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente
para encapsular la lógica de presentación. No deben contener lógica de aplicación ni
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
84
código de recuperación de base de datos. El controlador debe administrar toda la lógica
de aplicación. Una vista representa la interfaz de usuario adecuada usando los datos que
recibe del controlador. Estos datos se pasan a una vista desde un método de acción de
controlador usando el método View.
Lenguaje Razor
ASP.NET MVC ha tenido el concepto de motor de vistas (View Engine), las cuales
realizan tareas sólo de presentación. No contienen ningún tipo de lógica de negocio y no
acceden a datos. Básicamente se limitan a mostrar datos y a solicitar datos nuevos al
usuario.
ASP.NET MVC permite separar la sintaxis del servidor, del framework de ASP.NET MVC,
es lo que llamamos un motor de vistas de ASP.NET MVC, el cual viene acompañado de
un nuevo motor de vistas, llamado Razor.
Razor es una simple sintaxis de programacion para código de servidor embebido en
web pages.
La sintaxis Razor es basada en el framework ASP.NET, parte de Microsoft.NET
Framework.
La sintaxis Razor proporciona todo el poder de ASP.NET, pero es usado como una
sintaxis simplificada fácil de aprender.
Las paginas web Razor puede ser descrito como paginas HTML con dos clases de
contenido: contenido HTML y código Razor.
Las paginas web ASP.NET con sintaxis Razor tiene un archivo de extensión cshtml
(Razor para C#) o vbhtml (Razor para VB).
Sintaxis de Razor
En Razor el símbolo de la arroba (@) marca el inicio de código de servidor; no hay
símbolo para indicar que se termina el código de servidor: el motor Razor deduce cuando
termina en base al contexto.
Para mostrar una variable de servidor (item.Nombre por ejemplo) simplemente la
precedemos de una @. El uso de la estructura repetitiva foreach, en el uso de la llave de
cierre, no debe ser precedida de ninguna arroba, Razor ya sabe que esa llave es de
servidor y cierra el foreach abierto.
El uso de la @ funciona de dos maneras básicas:
@expresión: Renderiza la expresión en el navegador. Así @item.Nombre muestra el
valor de ítem.Nombre.
@{ código }: Permite ejecutar un código que no genera salida HTML.
HTML Helper
La clase HtmlHelper proporciona métodos que ayudan a crear controles HTML mediante
programación. Todos los métodos HtmlHelper generan HTML y devuelven el resultado
como una cadena.
Los métodos de extensión para la clase HtmlHelper están en el namespace
System.Web.Mvc.Html. Estas extensiones añaden métodos de ayuda para la creación
de formas, haciendo controles HTML, renderizado vistas parciales, la validación de
entrada, y más.
Puede utilizar la clase HtmlHelper en una vista utilizando la propiedad de la vista built-in
Html. Por ejemplo, llamar @ Html.ValidationSummary () hace un resumen de los
mensajes de validación.
Cuando se utiliza un método de extensión para hacer que un elemento HTML incluya un
valor, es importante entender cómo se recupera ese valor. Para los elementos que no
sea un elemento de la contraseña (por ejemplo, un cuadro de texto o botón de radio), el
valor se recupera en este orden: objeto ModelStateDictionary con el valor del parámetro
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
85
en el método de extensión; el objeto ViewDataDictionary con un valor en los atributos del
elemento HTML.
Para un elemento de la contraseña, el valor del elemento se recupera desde el valor de
parámetro en el método de extensión, o la del valor de atributo en el html atributos si no
se proporciona el parámetro.
Razor trabaja tanto con paginas aspx (Web Form) así como también con paginas
csthml (MVC)
Como se mencionó anteriormente, Razor no es un nuevo lenguaje de programación, el
equipo de Microsoft buscó fusionar el conocimiento de la programación en VB.NET o C#,
con el estándar HTML,
Combinar Razor con los Html Helpers nos ayuda a crear de manera rápida y sencilla
código e incluso acceder a datos que no necesariamente viene del controlador, tal como
se muestra.
@{
var items = new List{
new SelectListItem {Value = "1", Text = "Blue"},
new SelectListItem {Value = "2", Text = "Red"},
new SelectListItem {Value = "3", Text = "Green", Selected =
true},
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
86
new SelectListItem {Value = "4", Text = "Yellow", Selected =
true},
new SelectListItem {Value = "5", Text = "Black"}
};
}
@Html.ListBox("myListbox", items, null, 6, true)
@{
var db = Database.Open("Northwind");
var data = db.Query("SELECT CategoryId, CategoryName FROM
Categories");
var items = data.Select(i => new SelectListItem {
Value = i.CategoryId.ToString(),
Text = i.CategoryName,
Selected = i.CategoryId == 4 ? true : false
});
}
@Html.DropDownList("CategoryId", items)
@{
var db = Database.Open("Northwind");
var data = db.Query("SELECT CategoryId, CategoryName FROM
Categories");
var items = data.Select(i => new SelectListItem {
Value = i.CategoryId.ToString(),
Text = i.CategoryName
});
}
@Html.DropDownList("CategoryId", "Please Select One", items, 4, new
{@class = "special"})
Renderizado de los helpers
Hay HTML Helpers para toda clase de controles de formulario Web: Check Boxes, hidden
fields, password boxes, radio buttons, text boxes, text areas, DropDownList y ListBox.
Hay también un HTML Helper para el elemento Label, los cuales nos asocia a una
etiqueta del formulario Web. Cada HTML Helper nos da una forma rápida de
crear HTML valido para el lado del cliente.
La siguiente tabla lista los Html Helpers y su correspondiente renderizado HTML:
Helper
HTML Element
Html.CheckBox
Html.ActionLink
Html.DropDownList
Html.Hidden
Html.Label
Html.ListBox
or
Html.Password
Html.Radio
Html.TextArea
Html.TextBox
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
87
A continuación mostramos una comparativa de código creado con los HTML Helpers de
Razor y su equivalencia en HTML
HTML Helper Razor
HTML renderizado
4.2 Vistas parciales
Una vista parcial permite definir una vista que se representará dentro de una vista
primaria. Las vistas parciales se implementan como controles de usuario de ASP.NET
(.ascx). Cuando se crea una instancia de una vista parcial, obtiene su propia copia del
objeto ViewDataDictionary que está disponible para la vista primaria. Por lo tanto, la vista
parcial tiene acceso a los datos de la vista primaria. Sin embargo, si la vista parcial
actualiza los datos, esas actualizaciones solo afectan al objeto ViewData de la vista
parcial. Los datos de la vista primaria no cambian.
Creando una vista parcial
Para crea una vista parcial se nombra de la siguiente forma: _NombreVistaParcial, donde
el nombre se le debe anteponer el símbolo “_”.
En la siguiente figura se crea una vista parcial
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
88
Una vez creada la vista parcial nos aparecerá vacía y pasamos a generar el código del
control que necesitamos.
Para invocar a la vista parcial con los distintos datos:
@Html.Partial("_ListPlayerPartial")
@Html.Partial("_ListPlayerPartial", new ViewDataDictionary { valores})
Para invocar a una vista parcila, la podemos realizar desde un ActionResult. La diferencia
a una acción normal es que se retorna PartialView en lugar de View, y allí estamos
definiendo el nombre de la vista parcial (_Details) y como segundo parámetro el modelo,
entonces la definición de la vista parcial.
4.3 Patrón ViewModel
Model-View-ViewModel (MVVM) es un patrón de diseño de aplicaciones para desacoplar
código de interfaz de usuario y código que no sea de interfaz de usuario. Con MVVM,
defines la interfaz de usuario de forma declarativa (por ejemplo, mediante XAML) y usas
el marcado de enlace de datos para vincularla a otras capas que contengan datos y
comandos de usuario. La infraestructura de enlace de datos proporciona un
acoplamiento débil que mantiene sincronizados la interfaz de usuario y los datos
vinculados, y que enruta todas las entradas de usuario a los comandos apropiados.
El patrón MVVM organiza el código de tal forma que es posible cambiar partes
individuales sin que los cambios afecten a las demás partes. Esto presenta numerosas
ventajas, como las siguientes:
Permite un estilo de codificación exploratorio e iterativo.
Simplifica las pruebas unitarias.
Permite aprovechar mejor herramientas de diseño como Expression Blend.
Admite la colaboración en equipo.
Por el contrario, una aplicación con una estructura más convencional utiliza el enlace de
datos únicamente en controles de lista y texto, y responde a la entrada del usuario
mediante el control de eventos expuestos por los controles. Los controladores de eventos
están estrechamente acoplados a los controles y suelen contener código que manipula
la interfaz de usuario directamente. Esto hace que sea difícil o imposible reemplazar un
control sin tener que actualizar el código de control de eventos.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
89
Laboratorio 4.1
Consulta de Datos - publicando la conexión
Implemente un proyecto ASP.NET MVC, diseñe una página que permita listar los
registros de la tabla tb_clientes de la base de datos Negocios2018, ejecutando el
procedimiento almacenado usp_clientes
Creando el procedimiento almacenado
En el administrador del SQL Server, defina el procedimiento almacenado usp_clientes,
tal como se muestra.
Creando el proyecto
Iniciamos Visual Studio; seleccionar el proyecto Web; selecciona la plantilla Aplicación
web ASP.NET (.NET Framework), asignar el nombre y ubicación del proyecto; y
presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre y ubicación
del proyecto
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
90
A continuación, seleccionar la plantilla del proyecto MVC.
Selecciona la
plantilla
Creando la Clase del Modelo
Para efectuar y realizar la consulta de los datos de la tabla tb_clientes, agregamos, en
la carpeta Models, una clase, tal como se muestra.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
91
Asigne el nombre de la clase, la cual se llamará tb_clientes, tal como se muestra.
Presiona el botón AGREGAR
Para iniciar, agregamos la referencia DataAnnotations, luego defina los atributos de la
clase, visualizando el texto y orden de cada uno de ellos [Display (Name=”texto”,
Order=”n”)], tal como se muestra.
Agregar referencia
Atributos de la
clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
92
Publicando la cadena de conexión
Abrir el archivo Web.config, tal como se muestra
Abrir el archivo
Defina la etiqueta para agregar una cadena de conexión a la
base de datos Negocios2018, tal como se muestra.
Publicando la cadena
de conexión
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
93
A continuación agregar la referencia al proyecto:
Selecciona desde la opción Proyectos Agregar Referencia, selecciona la librería
System.Configuration, tal como se muestra. Presiona el botón ACEPTAR.
Seleccionar la librería
Creando un Controlador
A continuación, creamos un controlador: Desde la carpeta Controllers, selecciona la
opción Agregar, Controlador…, tal como se muestra.
Selecciona
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
94
Selecciona el scaffold, Controlador de MVC5: en blanco, presiona el botón AGREGAR
Selecciona
Asigne el nombre del controlador: NegociosController, tal como se muestra
Referenciar la carpeta Models, la librería Data.SqlClient y el System.Configuration
tal como se muestra.
Referenciar las librerías
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
95
Dentro del controlador, defina la conexión a la base de datos Negocios2018
instanciando el SqlConnection, utilice el ConfigurationManager.
Defina la
conexión
A continuación codifique la lista llamada Clientes:
1. Ejecuta el procedimiento almacenado usp_clientes a través del SqlCommand,
almacenando los resultados en el SqlDataReader.
2. Para guardar los resultados en el temporal se realiza a través de un bucle (mientras
se pueda leer: dr.Read()), vamos almacenando cada registro en el temporal.
3. Cerrar los objetos y enviar el objeto lista llamada temporal.
Método Clientes()
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
96
Defina el ActionResult ListadoClientes(), el cual enviará a la Vista el resultado del
método Clientes(), tal como se muestra.
ActionResult donde envía a la
vista la lista de clientes
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será List; y la clase de modelo la
cual es tb_clientes, tal como se muestra
Selecciona la plantilla
Selecciona la clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
97
Vista generada por la plantilla List, tal como se muestra
Recibe la lista de clientes
Cabecera de la lista
Registros que se
visualizaran en la Vista
Ejecutamos la Vista, visualizando los registros de la tabla tb_clientes
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
98
Laboratorio 4.2
Consulta de Datos con parámetros
Implemente un proyecto ASP.NET MVC, diseñe una página que permita listar los
registros de la tabla tb_clientes de la base de datos Negocios2018, filtrando por las
iniciales del campo NombreCia.
Creando el procedimiento almacenado
En el administrador del SQL Server, defina el procedimiento almacenado
usp_clientes_Nombre, tal como se muestra.
Creando el proyecto
Iniciamos Visual Studio; seleccionar el proyecto Web; selecciona la plantilla Aplicación
web ASP.NET (.NET Framework), asignar el nombre y ubicación del proyecto; y
presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre y ubicación
del proyecto
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
99
A continuación, seleccionar la plantilla del proyecto MVC.
Selecciona la
plantilla
Creando la Clase del Modelo
Para efectuar y realizar la consulta de los datos de la tabla tb_clientes, agregamos, en
la carpeta Models, una clase, tal como se muestra.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
100
Asigne el nombre de la clase, la cual se llamará tb_clientes, tal como se muestra.
Presiona el botón AGREGAR
Para iniciar, agregamos la referencia DataAnnotations, luego defina los atributos de la
clase, visualizando el texto y orden de cada uno de ellos [Display (Name=”texto”,
Order=”n”)], tal como se muestra.
Agregar referencia
Atributos de la
clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
101
Publicando la cadena de conexión
Abrir el archivo Web.config, tal como se muestra
Abrir el archivo
Defina la etiqueta para agregar una cadena de conexión a la
base de datos Negocios2018, tal como se muestra.
Publicando la cadena
de conexión
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
102
A continuación agregar la referencia al proyecto:
Selecciona desde la opción Proyectos Agregar Referencia, selecciona la librería
System.Configuration, tal como se muestra. Presiona el botón ACEPTAR.
Seleccionar la librería
Creando un Controlador
A continuación, creamos un controlador: Desde la carpeta Controllers, selecciona la
opción Agregar, Controlador…, tal como se muestra.
Selecciona
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
103
Selecciona el scaffold, Controlador de MVC5: en blanco, presiona el botón AGREGAR
Selecciona
Asigne el nombre del controlador: NegociosController, tal como se muestra
Referenciar la carpeta Models, la librería Data.SqlClient y el System.Configuration
tal como se muestra.
Referenciar las librerías
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
104
Dentro del controlador, defina la conexión a la base de datos Negocios2018
instanciando el SqlConnection, utilice el ConfigurationManager.
Defina la
conexión
A continuación codifique la lista llamada ClientesNombre:
1. Ejecuta el procedimiento almacenado usp_clientes_Nombre a través del
SqlCommand, pasando el valor de su parámetro @nombre. El resultado se almacena
en el SqlDataReader.
2. Para guardar los resultados en el temporal se realiza a través de un bucle (mientras
se pueda leer: dr.Read()), vamos almacenando cada registro en el temporal.
3. Cerrar los objetos y enviar el objeto lista llamada temporal.
Método
ClientesNombre()
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
105
Defina el ActionResult ClientesporNombre(string nombre), el cual enviará a la Vista el
resultado del método ClientesNombre(). Inicialice el parámetro nombre, tal como se
muestra.
Almaceno el valor de la variable
en el ViewBag. Envío a la vista
la lista de clientes filtrada
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será List; y la clase de modelo la
cual es tb_clientes, tal como se muestra
Selecciona la plantilla
Selecciona la clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
106
Vista generada por la plantilla List, tal como se muestra
Recibe la lista de clientes
Cabecera de la lista
Registros que se visualizaran
en la Vista
Modifica la Vista, agregando un formulario, tal como se muestra
Agrega un Formulario para
ingresar el valor para el
parámetro “nombre”
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
107
Ejecutamos la Vista, ingresa las iniciales en el campo text (nombre), al presionar el
botón Consulta (submit) visualizamos los registros de la tabla tb_clientes
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
108
Sesión 02: Consulta de Datos con parámetros
Diseña una página que permita listar los registros de la tabla tb_pedidoscabe (idpedido,
FechaPedido, NombreCia (tb_clientes), direccionDestinatario de la base de datos
Negocios2018, filtrando por un determinado año del campo FechaPedido.
Creando el procedimiento almacenado
En el administrador del SQL Server, defina el procedimiento almacenado
usp_pedido_Año, tal como se muestra
Creando la Clase del Modelo
Para efectuar y realizar la consulta de los datos de la tabla tb_pedidos, agregamos, en
la carpeta Models, una clase, tal como se muestra.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
109
Asigne el nombre de la clase, la cual se llamará tb_pedidos, tal como se muestra.
Presiona el botón AGREGAR
Para iniciar, agregamos la referencia DataAnnotations, luego defina los atributos de la
clase, visualizando el texto y orden de cada uno de ellos [Display (Name=”texto”,
Order=”n”)], tal como se muestra.
Agregar referencia
Atributos de la
clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
110
Trabajando con el ActionResult del Controlador
En el Controlador NegociosController, defina la lista llamada PedidosYear:
1. Defina el parámetro y (int y)
2. Ejecuta el procedimiento almacenado usp_pedido_Year a través del SqlCommand,
pasando el valor de su parámetro @nombre.
3. El resultado se almacena en el SqlDataReader.
2. Para guardar los resultados en el temporal se realiza a través de un bucle (mientras
se pueda leer: dr.Read()), vamos almacenando cada registro en el temporal.
3. Cerrar los objetos y enviar el objeto lista llamada temporal
A continuación, defina el ActionResult PedidosporAño, tal como se muestra
ActionResult
PedidosporAño
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
111
Defina en el ActionResult el ViewBag.y donde almaceno el valor y; retornando a la
Vista el resultado del método PedidosYear filtrando con el valor del parámetro.
Almaceno el valor de la variable
en el ViewBag. Envío a la vista
la lista de pedidos filtrada
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será List; y la clase de modelo la
cual es tb_pedidos, tal como se muestra
Selecciona la plantilla
Selecciona la clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
112
Vista generada por la plantilla List, tal como se muestra
Recibe la lista de pedidos
Cabecera de la lista
Registros que se visualizaran
en la Vista
Modifica la Vista, agregando un formulario, tal como se muestra
Formulario donde envío el
valor del año al ActionResult
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
113
Ejecutamos la Vista, ingresa el año en el campo text (y), al presionar el botón Consulta
(submit) visualizamos los registros de la tabla tb_pedidos
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
114
Resumen
En el modelo Model-View-Controller (MVC), las vistas están pensadas exclusivamente para
encapsular la lógica de presentación. No deben contener lógica de aplicación ni código de
recuperación de base de datos. El controlador debe administrar toda la lógica de aplicación.
Una vista representa la interfaz de usuario adecuada usando los datos que recibe del
controlador. Estos datos se pasan a una vista desde un método de acción de controlador
usando el método View.
ASP.NET MVC ha tenido el concepto de motor de vistas (View Engine), las cuales realizan
tareas sólo de presentación. No contienen ningún tipo de lógica de negocio y no acceden a
datos. Básicamente se limitan a mostrar datos y a solicitar datos nuevos al usuario. ASP.NET
MVC se ha definido una sintaxis que permite separar la sintaxis de servidor usada, del
framework de ASP.NET MVC, es lo que llamamos un motor de vistas de ASP.NET MVC, el
cual viene acompañado de un nuevo motor de vistas, llamado Razor.
La clase HtmlHelper proporciona métodos que ayudan a crear controles HTML mediante
programación. Todos los métodos HtmlHelper generan HTML y devuelven el resultado como
una cadena. Los métodos de extensión para la clase HtmlHelper están en el namespace
System.Web.Mvc.Html. Estas extensiones añaden métodos de ayuda para la creación de
formas, haciendo controles HTML, renderizado vistas parciales, la validación de entrada.
Hay HTML Helpers para toda clase de controles de formulario Web: check boxes, hidden
fields, password boxes, radio buttons, text boxes, text areas, DropDown lists y list boxes.
Hay también un HTML Helper para el elemento Label, los cuales nos asocial descriptivas de
texto a un formulario Web. Cada HTML Helper nos da una forma rápida de crear HTML valido
para el lado del cliente.
Una vista parcial permite definir una vista que se representará dentro de una vista primaria.
Las vistas parciales se implementan como controles de usuario de ASP.NET (.ascx). Cuando
se crea una instancia de una vista parcial, obtiene su propia copia del objeto
ViewDataDictionary que está disponible para la vista primaria. Por lo tanto, la vista parcial
tiene acceso a los datos de la vista primaria. Sin embargo, si la vista parcial actualiza los
datos, esas actualizaciones solo afectan al objeto ViewData de la vista parcial. Los datos de
la vista primaria no cambian
Si desea saber más acerca de estos temas, puede consultar las siguientes páginas.
o https://msdn.microsoft.com/es-es/library/windows/apps/jj883732.aspx
o http://speakingin.net/2011/01/30/asp-net-mvc-3-sintaxis-de-razor-y/
o http://www.julitogtu.com/2013/02/07/asp-net-mvc-cargar-una-vista-parcial-con-ajax/
o https://msdn.microsoft.com/es-pe/library/dd410123(v=vs.100).aspx
o http://andresfelipetrujillo.com/2014/08/08/aprendiendo-asp-net-mvc-4-parte-5vistas/
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
115
UNIDAD DE
APRENDIZAJE
2
TRABAJANDO CON DATOS EN
ASP.NET MVC
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno desarrolla aplicaciones con acceso a datos teniendo
implementando procesos de consulta y actualización de datos
TEMARIO
Tema 5: Manipulación de datos (5 horas)
5.1 Operaciones de actualización sobre un origen de datos.
5.2 Manejo de la clase Command
5.3 Ejecutando operaciones de actualización de datos con sentencias SQL o
procedimiento almacenado.
5.4 Manejo de transacciones: clase Transaction.
5.5 Implementando un proceso con transacciones explicitas.
ACTIVIDADES PROPUESTAS
Los alumnos implementan un proyecto web utilizando el patrón ASP.NET MVC
para realizar operaciones de actualización de datos.
Los alumnos desarrollan los laboratorios de esta semana
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
CIBERTEC
116
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
5.
117
OPERACIÓN DE MODIFICACION DE DATOS SOBRE UN
ORIGEN DE DATOS
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE o DELETE) no
devuelven ninguna fila. De la misma forma, muchos procedimientos almacenados realizan
alguna acción pero no devuelven filas. Para ejecutar comandos que no devuelvan filas, cree un
objeto Command con el comando SQL adecuado y una Connection, incluidos los Parameters
necesarios. El comando se debe ejecutar con el método ExecuteNonQuery del objeto
Command.
El método ExecuteNonQuery devuelve un entero que representa el número de filas que se ven
afectadas por la instrucción o por el procedimiento almacenado que se haya ejecutado. Si se
ejecutan varias instrucciones, el valor devuelto es la suma de los registros afectados por todas
las instrucciones ejecutadas.
5.1 Manejo de la clase COMMAND
Una vez establecida una conexión a un origen de datos, puede ejecutar comandos y devolver
resultados desde el mismo mediante un objeto DbCommand.
Figura 1: Diagrama del objeto Command
Referencia: http://www.dotnetero.com/2006/08/adonet-para-novatos.html
Para crear un comando, puede utilizar uno de los constructores de comando del proveedor
de datos .NET Framework con el que esté trabajando. Los constructores pueden aceptar
argumentos opcionales, como una instrucción SQL para ejecutar en el origen de datos, un
objeto DbConnection o un objeto DbTransaction. También puede configurar dichos objetos
como propiedades del comando. También puede crear un comando para una determinada
conexión mediante el método CreateCommand de un objeto DbConnection. La instrucción
SQL que ejecuta el comando se puede configurar mediante la propiedad CommandText.
Cada proveedor de datos de .NET FrameWork cuenta con un objeto Command:
Proveedor
OledbCommand
SqlCommand
OdbcCommand
OracleCommand
CIBERTEC
Descripcion
Proveedor de datos para OLEDB
Proveedor de datos para SQL
Server
Proveedor de datos para ODBC
Proveedor de datos para Oracle
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
118
EJECUCION DE UN OBJETO COMMAND
Cada proveedor de datos .NET Framework incluido en .NET Framework dispone de su propio
objeto command que hereda de DbCommand.
El proveedor de datos .NET Framework para OLE DB incluye un objeto OleDbCommand, el
proveedor de datos .NET Framework para SQL Server incluye un objeto SqlCommand, el
proveedor de datos .NET Framework para ODBC incluye un objeto OdbcCommand y el
proveedor de datos .NET Framework para Oracle incluye un objeto OracleCommand.
Cada uno de estos objetos expone métodos para ejecutar comandos que se basan en el tipo
de comando y el valor devuelto deseado, tal como se describe en la tabla siguiente:
Commando
Valor de retorno
ExecuteReader
ExecuteScalar
ExecuteNonQuery
ExecuteXMLReader
Devuelve un objeto DataReader.
Devuelve un solo valor escalar.
Ejecuta un comando que no devuelve ninguna fila.
Devuelve un valor XmlReader. Solo está disponible para
un objeto SqlCommand.
Cada objeto command fuertemente tipado admite también una enumeración CommandType
que especifica cómo se interpreta una cadena de comando, tal como se describe en la tabla
siguiente
Commando
Valor de retorno
Text
Comando de SQL que define las instrucciones que se van a
ejecutar en el origen de dato
Nombre del procedimiento almacenado. Puede usar la
propiedad Parameters de un comando para tener acceso a los
parámetros de entrada y de salida y a los valores devueltos,
independientemente del método Execute al que se llame. Al
usar ExecuteReader, no es posible el acceso a los valores
devueltos y los parámetros de salida hasta que se cierra
DataReader
Nombre de una tabla.
StoredProcedure
TableDirect
EJECUCIÓN DE UNA CONSULTA QUE RETORNE UN CONJUNTO DE
RESULTADOS
El objeto Command de ADO.NET tiene un método ExecuteReader que permite ejecutar una
consulta que retorna uno o más conjunto de resultados.
Al ejecutar el método ExecuteReader, podemos pasar un parámetro al método el cual
representa la enumeración CommandBehavior, que permite controlar al Command como se
ejecutado.
A continuación mostramos la descripción de los enumerables del CommandBehavior:
Valor
Descripción
CommandBehavior.CloseConnection
Se utiliza para cerrar la conexión en forma
automática, tan pronto como el dataReader
es cerrado.
Retorna un único conjunto de resultados
Retorna una fila
CommandBehavior.SingleResult
CommandBehavior.SingleRow
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
119
5.2 EJECUTANDO OPERACIONES DE ACTUALIZACION DE DATOS
UTILIZANDO SQL O PROCEDIMIENTO ALMACENADO
Los procedimientos almacenados ofrecen numerosas ventajas en el caso de aplicaciones que
procesan datos. Mediante el uso de procedimientos almacenados, las operaciones de bases
de datos se pueden encapsular en un solo comando, optimizar para lograr el mejor
rendimiento, y mejorar con seguridad adicional.
Aunque es cierto que para llamar a un procedimiento almacenado basta con pasar en forma
de instrucción SQL su nombre seguido de los argumentos de parámetros, el uso de la
colección Parameters del objeto DbCommand de ADO.NET permite definir más
explícitamente los parámetros del procedimiento almacenado, y tener acceso a los
parámetros de salida y a los valores devueltos.
Figura 2: Diagrama del objeto SqlCommand
Referencia: http://yinyangit.wordpress.com/2011/08/05/ado-net-tutorial-lesson-06-addingparameters-to-sqlcommands/
MANEJO DE PARAMETROS EN ACTUALIZACION DE DATOS
Cuando se usan parámetros con SqlCommand para ejecutar un procedimiento almacenado
de SQL Server, los nombres de los parámetros agregados a la colección Parameters deben
coincidir con los nombres de los marcadores de parámetro del procedimiento almacenado.
El proveedor de datos de .NET Framework para SQL Server no admite el uso del marcador
de posición de signo de interrogación de cierre (?) para pasar parámetros a una instrucción
SQL o a un procedimiento almacenado. Este proveedor trata los parámetros del
procedimiento almacenado como parámetros con nombre y busca marcadores de parámetros
coincidentes.
Para crear un objeto DbParameter, se puede usar su constructor o bien se puede agregar a
DbParameterCollection mediante una llamada al método Add de la colección
DbParameterCollection.
El método Add acepta como entrada argumentos del constructor o cualquier objeto de
parámetro ya existente, en función del proveedor de datos.
En el caso de los parámetros que no sean de entrada (INPUT), debe de asignarse la
propiedad ParameterDirection y especifique cual es el tipo de dirección del parámetro:
InputOutput, Output o ReturnValue
El tipo de datos de un parámetro es específico del proveedor de datos de .NET Framework.
Al especificar el tipo, el valor de Parameter se convierte en el tipo del proveedor de datos de
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
120
.NET Framework antes de pasar el valor al origen de datos. Si lo desea, puede especificar el
tipo de un objeto Parameter de forma genérica estableciendo la propiedad DbType del objeto
Parameter en un DbType determinado.
Las instrucciones SQL que modifican datos (por ejemplo INSERT, UPDATE o DELETE) no
devuelven ninguna fila. De la misma forma, muchos procedimientos almacenados realizan
alguna acción pero no devuelven filas. Para ejecutar comandos que no devuelvan filas, cree
un objeto Command con el comando SQL adecuado y una Connection, incluidos los
Parameters necesarios. El comando se debe ejecutar con el método ExecuteNonQuery del
objeto Command.
El método ExecuteNonQuery devuelve un entero que representa el número de filas que se
ven afectadas por la instrucción o por el procedimiento almacenado que se haya ejecutado.
Si se ejecutan varias instrucciones, el valor devuelto es la suma de los registros afectados por
todas las instrucciones ejecutadas.
5.3 MANEJO DE TRANSACCIONES 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 tiene disponibilidad de crédito, una serie de operaciones relacionadas garantiza
que se obtenga el libro y la librería obtiene el dinero. Sin embargo, si la operación sufre de un
error durante el intercambio comercial, el erro afecta a la totalidad del proceso. No se obtiene
el libro y la librería no obtiene el dinero.
Una transacción consiste en un comando único o en un grupo de comandos que se ejecutan
como un paquete. Las transacciones permiten combinar varias operaciones en una sola
unidad de trabajo. Si en un punto de la transacción se produjera un error, todas las
actualizaciones podrían revertirse y devolverse al estado que tenían antes de la transacción.
Una transacción debe ajustarse a las propiedades: atomicidad, coherencia, aislamiento y
durabilidad para poder garantizar la coherencia de datos. La mayoría de los sistemas de bases
de datos relacionales, como Microsoft SQL Server, admiten transacciones, al proporcionar
funciones de bloqueo, registro y administración de transacciones cada vez que una aplicación
cliente realiza una operación de actualización, inserción o eliminación.
5.3.1 IMPLEMENTANDO
EXPLICITA
UNA
TRANSACCION
IMPLICITA
Y
Una transacción explícita es aquella en que se define explícitamente el inicio y el final de la
transacción. Las aplicaciones utilizan las instrucciones BEGIN TRANSACTION, COMMIT
TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION o ROLLBACK WORK de
Transact-SQL para definir transacciones explícitas.
BEGIN TRANSACTION
Marca el punto de inicio de una transacción explícita para una conexión.
COMMIT TRANSACTION o COMMIT WORK
Se utiliza para finalizar una transacción correctamente si no hubo errores. Todas las
modificaciones de datos realizadas en la transacción se convierten en parte permanente de
la base de datos. Se liberan los recursos ocupados por la transacción.
ROLLBACK TRANSACTION o ROLLBACK WORK
Se utiliza para eliminar una transacción en la que se encontraron errores. Todos los datos
modificados por la transacción vuelven al estado en el que estaban al inicio de la transacción.
Se liberan los recursos ocupados por la transacción.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
121
En ADO, utilice el método BeginTrans en un objeto Connection para iniciar una transacción
explícita. Para finalizar la transacción, llame a los métodos CommitTrans o RollbackTrans del
objeto Connection.
En el proveedor administrado de SqlCliente de ADO.NET, utilice el método BeginTransaction
en un objeto SqlConnection para iniciar una transacción explícita. Para finalizar la transacción,
llame a los métodos Commit() o Rollback() del objeto SqlTransaction.
El modo de transacciones explícitas se mantiene solamente durante la transacción. Cuando
la transacción termina, la conexión vuelve al modo de transacción en que estaba antes de
iniciar la transacción explícita, es decir, el modo implícito o el modo de confirmación
automática.
Cada proveedor de datos de .NET Framework tiene su propio objeto Transaction para realizar
transacciones locales. Si necesita que se realice una transacción en una base de datos de
SQL Server, seleccione una transacción de System.Data.SqlClient. En transacciones de
Oracle, utilice el proveedor System.Data.OracleClient. Además, existe una nueva clase
DbTransaction disponible para la escritura de código independiente del proveedor que
requiere transacciones.
En ADO.NET, las transacciones se controlan con el objeto Connection. Puede iniciar una
transacción local con el método BeginTransaction. Una vez iniciada una transacción, puede
inscribir un comando en esa transacción con la propiedad Transaction de un objeto
Command. Luego, puede confirmar o revertir las modificaciones realizadas en el origen de
datos según el resultado correcto o incorrecto de los componentes de la transacción. Las
operaciones para confirmar una transacción es Commit y la operación para revertir o
deshacer una transacción es RollBack.
Una transacción implícita inicia una nueva transacción en una conexión a SQL Server
Database Engine (Motor de base de datos de SQL Server) después de confirmar o revertir la
transacción actual. No tiene que realizar ninguna acción para delinear el inicio de una
transacción, sólo tiene que confirmar o revertir cada transacción. El modo de transacciones
implícitas genera una cadena continua de transacciones.
La transacción sigue activa hasta que emita una instrucción COMMIT o ROLLBACK. Una vez
que la primera transacción se ha confirmado o revertido, la instancia Motor de base de datos
inicia automáticamente una nueva transacción la siguiente vez que la conexión ejecuta una
de estas instrucciones. La instancia continúa generando una cadena de transacciones
implícitas hasta que se desactiva el modo de transacciones implícitas.
El modo de transacciones implícitas se establece mediante la instrucción SET de TransactSQL o a través de funciones y métodos de la API de bases de datos.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
122
Laboratorio 5.1
Manipulación de Datos
Implemente un proyecto ASP.NET MVC, donde permita INSERTAR, CONSULTAR y
ACTUALIZAR los datos de la tabla tb_distritos.
Creando la tabla tb_distritos
En el administrador del SQL Server, defina la tabla tb_distritos, tal como se muestra.
Creando el proyecto
Iniciamos Visual Studio; seleccionar el proyecto Web; selecciona la plantilla Aplicación
web ASP.NET (.NET Framework), asignar el nombre y ubicación del proyecto; y
presionar el botón ACEPTAR
Selecciona el tipo
de proyecto
Nombre y ubicación
del proyecto
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
123
A continuación, seleccionar la plantilla del proyecto MVC.
Selecciona la
plantilla
Publicando la cadena de conexión
Abrir el archivo Web.config, tal como se muestra
Abrir el archivo
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
124
Defina la etiqueta para agregar una cadena de conexión a la
base de datos Negocios2018, tal como se muestra.
Publicando la cadena
de conexión
A continuación agregar la referencia al proyecto:
Selecciona desde la opción Proyectos Agregar Referencia, selecciona la librería
System.Configuration, tal como se muestra. Presiona el botón ACEPTAR.
Seleccionar la librería
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
125
Creando la Clase del Modelo
Para realizar las operaciones a la tabla tb_distritos, agregamos, en la carpeta Models,
una clase, tal como se muestra.
Selecciona el
elemento
Asigne el nombre de la clase, la cual se llamará tb_distritos, tal como se muestra.
Presiona el botón AGREGAR
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
126
Para iniciar, agregamos la referencia DataAnnotations, luego defina los atributos de la
clase, visualizando el texto y orden de cada uno de ellos [Display (Name=”texto”,
Order=”n”)], tal como se muestra. Defina la validación para cada uno de los atributos.
Agregar referencia
Agregando una Vista Parcial
Defina una Vista Parcial para listar de los registros de tb_distritos. En la carpeta
Shared, selecciona la opción AGREGAR Página parcial de MVC 5 (Razor), tal
como se muestra.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
127
Asigne el nombre: _PartialDistrito, tal como se muestra
A continuación, codifique la vista parcial:
1. Defina la estructura de datos que recibirá la vista (IEnumerable de tb_distritos)
Modelo de Datos
2. A continuación, definimos una etiqueta , donde visualizamos la cabecera y
los registros de la consulta. En esta primera parte, dentro del definimos la
cabecera, utilizando la etiqueta , tal como se muestra
Cabecera
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
128
3. Definida la cabecera, vamos a definir la estructura para listar los registros. Dentro de
un foreach, vamos a listar cada uno de los campos del registro de la consulta, tal
como se muestra.
Lista de registros
Creando un Controlador
A continuación, creamos un controlador: Desde la carpeta Controllers, selecciona la
opción Agregar, Controlador…, tal como se muestra.
Selecciona
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
129
Selecciona el scaffold, Controlador de MVC5: en blanco, presiona el botón AGREGAR
Selecciona
Asigne el nombre del controlador: NegociosController, tal como se muestra
Referenciar la carpeta Models, la librería Data.SqlClient y el System.Configuration
tal como se muestra.
Referenciar las librerías
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
130
Dentro del controlador, defina la conexión a la base de datos Negocios2018
instanciando el SqlConnection, utilice el ConfigurationManager.
Defina la
conexión
Trabajando con el ActionResult Home
Codifique el método llamado Distritos():
1. Ejecuta la sentencia SQL que liste los registros de tb_distritos a través del
SqlCommand. El resultado se almacena en el SqlDataReader.
2. Para guardar los resultados en el temporal se realiza a través de un bucle (mientras
se pueda leer: dr.Read()), vamos almacenando cada registro en el temporal.
3. Cerrar los objetos y enviar el objeto lista llamada temporal.
Retorna la lista de los
registros de
tb_distritos
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
131
Defina el ActionResult Home(), el cual enviará a la Vista el resultado del método
Distritos(), tal como se muestra.
Envía a la Vista el resultado del
método Distritos()
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será List; y la clase de modelo la
cual es tb_distritos, tal como se muestra
Selecciona la plantilla
Selecciona la clase
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
132
Modifica la Vista:
1. Agregar un ActionLink el cual ejecutará el ActionResult Create.
2. Agrega la vista parcial llamado _partialDistrito
Agregar la Vista Parcial
Ejecutamos la Vista, visualizamos los registros de la tabla tb_distritos.
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
133
Trabajando con el ActionResult Create
En el controlador Negocios, defina el ActionResult Create(), de tipo Get y Post, tal
como se muestra.
Create tipo Get, envía los
datos a la Vista
Create tipo Post, recibe los
datos y ejecuta un proceso
El ActionResult Create de tipo GET, envía a la vista un nuevo registro de tb_distritos,
en blanco, tal como se muestra.
ActionResult Create de tipo
GET
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
134
El ActionResult Create de tipo POST, recibe los datos de la vista, los valida; si está
OK, procederá a ejecutar el comando INSERT INTO, retornando un mensaje y los
datos del registro agregado, tal como se muestra
ActionResult Create de
tipo POST
Codifique el proceso del Insert into en el ActionResult Create tipo POST
Codifique el proceso del
Insert Into
CIBERTEC
CARRERAS PROFESIONALES
PROGRAMACIÓN ORIENTADA A OBJETOS II
135
Agregando la Vista.
En el ActionResult, agrega la vista.
En dicha ventana, selecciona la plantilla, la cual será Create; y la clase de modelo
la cual es tb_distritos, tal como se muestra
Selecciona la plantilla
Selecciona la clase
Modifique el diseño de la vista, tal como se muestra
Links para
ejecutar
métodos
Agregar el
Navigation menu
Versions of this User Manual: