0% encontró este documento útil (0 votos)
40 vistas31 páginas

Guia 4

Cargado por

Alex Mina
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas31 páginas

Guia 4

Cargado por

Alex Mina
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 31

UNIVERSIDAD DON BOSCO

FACULTAD DE INGENIERIA
COORDINACION DE COMPUTACIÓN
GUIA DE LABORATORIO # 4
Nombre de la Práctica: Conectando a Fuentes de Datos
CICLO: 01/2020 Lugar de Ejecución: Centro de cómputo
Tiempo Estimado: 2 horas con 30 minutos
MATERIA: Lenguaje de Programación II.

II. INTRODUCCIÓN TEÓRICA

Terminología de Bases de Datos:

 Una Base de Datos es un fichero electrónico (o conjunto de ficheros) que permite almacenar
información de manera estructurada.
 Una Base de Datos Relacional es un modelo de base de datos que almacena la información en Tablas.
 Cada Tabla, almacena un conjunto específico de datos estructurados. Una tabla contiene una colección
de filas (tuplas o registros) y columnas (campos o atributos).
 Cada Columna de la tabla posee un nombre, y un Tipo de Dato, que define la información que podrá
almacenar. Por ejemplo: fechas, nombres, importes en moneda o números.
 Las Tablas poseen además, restricciones como ser la “Clave Primaria”, que asegura la unicidad delos
datos en la tabla; además de relaciones o claves foráneas con otras tablas, implementando integridad
referencial.

ADO.NET

ADO.NET es un conjunto de componentes del software que pueden ser usados por los programadores para
acceder a datos y a servicios de datos. Es una parte de la biblioteca de clases base que están incluidas en el
Microsoft .NETFramework. Es comúnmente usado por los programadores para acceder y para modificar los
datos almacenados en unSistema Gestor de Bases de Datos Relacionales, aunque también puede ser usado para
acceder a datos en fuentes no relacionales. ADO.NET es a veces considerado como una evolución de la tecnología
ActiveX Data Objects (ADO), pero fue cambiado tan extensivamente que puede ser concebido como un producto
enteramente nuevo. ADO.NET consiste en dos partes primarias:

Data provider: estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL Server y Oracle.
Cada fuente de datos tiene su propio conjunto de objetos del proveedor, pero cada uno tienen un conjunto
común de clases de utilidad:

 Connection: Proporciona una conexión usada para comunicarse con la fuente de datos. También actúa
como Abstract Factory para los objetos command.
 Command: Usado para realizar alguna acción en la fuente de datos, como lectura, actualización,
oborrado de datos relacionales.
 Parameter: Describe un simple parámetro para un command. Un ejemplo común es un parámetro
para ser usado en un procedimiento almacenado.
 DataAdapter: "Puente" utilizado para transferir data entre una fuente de datos y un objeto DataSet
(ver abajo).
 DataReader: Es una clase usada para procesar eficientemente una lista grande de resultados, un
registro a la vez.

Lenguaje de Programación II. 1 / 31


DataSets: los objetos DataSets, son un grupo de clases que describen una simple base de datos relacional en
memoria, fueron la estrella del show en el lanzamiento inicial (1.0) del Microsoft .NET Framework. Las clases
forman una jerarquía de contención:

 Un objeto DataSet representa un esquema (o una base de datos entera o un subconjunto de una).
Puede contener las tablas y las relaciones entre esas tablas.
o Un objeto DataTable representa una sola tabla en la base de datos. Tiene un nombre, filas, y
columnas.
▪ Un objeto DataView "se sienta sobre" un DataTable y ordena los datos (como una
cláusula "order by" de SQL) y, si se activa un filtro, filtra los registros (como una
cláusula "where" del SQL). Para facilitar estas operaciones se usa un índice en memoria.
Todas las DataTables tienen un filtro por defecto, mientras que pueden ser definidos
cualquier número de DataViews adicionales, reduciendo la interacción con la base de
datos subyacente y mejorando así el desempeño.
• Un DataColumn representa una columna de la tabla, incluyendo su nombre y
tipo.
• Un objeto DataRow representa una sola fila en la tabla, y permite leer y
actualizar los valores en esa fila, así como la recuperación de cualquier fila que
esté relacionada con ella a través de una relación de clave primaria - clave
extranjera.
• Un DataRowView representa una sola fila de un DataView, la diferencia entre
un DataRow y el DataRowView es importante cuando se está interactuando
sobre un resultset.
 Un DataRelation es una relación entre las tablas, tales como una relación de clave primaria - clave
ajena. Esto es útil para permitir la funcionalidad del DataRow de recuperar filas relacionadas.
 Un Constraint describe una propiedad de la base de datos que se debe cumplir, como que los valores
en una columna de clave primaria deben ser únicos. A medida que los datos son modificados
cualquier violación que se presente causará excepciones.

Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades Connection y Command
que han sido iniciados. Sin embargo, un DataSet puede guardar su contenido a XML (opcionalmente con un
esquema XSD), o llenarse a sí mismo desde un XML, haciendo esto excepcionalmente útil para los servicios web,
computación distribuida, y aplicaciones ocasionalmente conectadas desconectados.

Lenguaje de Programación II. 1 / 31


Acceso a Bases de Datos Relaciónales Escenario Conectado
Un entorno conectado es uno en el cual los usuarios están constantemente conectados a la fuente de datos
Ventajas:
 Mayor seguridad
 Mejor control de concurrencia
 Los datos se mantienen actualizados
Desventajas:
 Se requiere una conexión constante (consume recursos del servidor)
 Escalabilidad

Acceso a Bases de Datos Relacionales Escenario Desconectado


En un entorno desconectado, una parte de los datos del repositorio central se copia y modifica en forma local,
para luego sincronizarse con éste.
Ventajas
 Se puede trabajar en forma independiente
 Mayor escalabilidad y performance

Desventajas
 Los datos no están sincronizados
 Resolución manual de conflictos

System.Data

 Es el espacio de nombres de ADO .NET.


 Tareas habituales en la programación de aplicaciones que gestionan bases de datos:
o Establecer una conexión con la Base de Datos.
o Solicitar al Servidor datos específicos.
o El Servidor retorna los datos solicitados.
o El Usuario modifica los datos, y envía las actualizaciones al Servidor.
o Se cierra la conexión.
 La gestión de datos se puede realizar en línea, o en un proceso desconectado.

ADO .NET ofrece un modelo unificado de desarrollo a lo largo de la Plataforma .NET, independiente al lenguaje
de Programación (Visual Basic .NET, C#, etc.) e independiente a la arquitectura de la aplicación a desarrollar
(aplicación de escritorio, aplicación web, aplicación de consola, etc.).

Clase DataSet
El DataSet de ADO.NET es el componente central de la arquitectura sin conexión de ADO.NET. El
DataSet está expresamente diseñado para el acceso a datos independientemente del origen de datos.
Como resultado, se puede utilizar con múltiples y distintos orígenes de datos, con datos XML o para
administrar datos locales de la aplicación. El DataSet contiene una colección de uno o más objetos
DataTable formados por filas y columnas de datos, así como información sobre claves principales, claves
externas, restricciones y relaciones relativas a los datos incluidos en los objetos DataTable.

 Objeto estrella en ADO.NET


 Representa una caché de datos en memoria
 Contiene DataTables
 Lee y escribe datos y esquemas en XML
 Puede ser tipado o no tipado.
o Ambos heredan de la clase DataSet
Lenguaje de Programación II. 1 / 31
 El tipado se apoya en un esquema XML (.XSD) para generar la clase
 El tipado tiene ventajas:
o Expone estructura como propiedades y métodos: Intellisense
o Recoge la Primary key

Clase SQLAdapter
• Representa un conjunto de
Commands y una Connection
• Puente entre el DataSet y la BD
• Lee y actualiza la BD:
 SelectCommand,
 UpdateCommand,
 InsertCommand
 DeleteCommand

Clase DataTable
 Representa una tabla en memoria
 Lo rellena un DataAdapter o a mano
 Componente principal de los objetos DataSet y DataView
Clase DataView
 Vista personalizada de un objeto DataTable
 Filtros, ordenación, búsquedas
DataRelation
 Define relaciones entre tablas
 Utiliza columnas de un DataTable

Lenguaje de Programación II. 1 / 31


Controles de validación
Un aspecto importante de la creación de páginas Web ASP.NET para la entrada de datos por el usuario consiste
en poder comprobar que la información que introducen los usuarios es válida. ASP.NET ofrece un conjunto de
controles de validación que proporciona una forma eficaz y fácil de usar para comprobar errores y, si es
necesario, mostrar mensajes al usuario. En los temas de esta sección se describen los controles de validación y
cómo utilizarlos. En la tabla siguiente se muestran los controles de validación de ASP.NET y cómo se utilizan.

Tipo de
Utilizar control Descripción
validación
Entrada RequiredFieldValidator Garantiza que el usuario no omite una entrada.
requerida.
Comparación CompareValidator Compara los datos proporcionados por el usuario con un
con un valor valor constante, con el valor de otro control (mediante un
operador de comparación como menor que, igual que o
mayor que) o para un tipo de datos específico.
Comprobación RangeValidator Comprueba que una entrada de usuario está entre los límites
del intervalo superior e inferior especificados. Se pueden comprobar los
intervalos entre pares de números, caracteres
alfabéticos y fechas.
Coincidencia RegularExpressionValidator Comprueba que la entrada del usuario coincide con un
de modelos modelo definido por una expresión regular. Este tipo de
validación permite comprobar secuencias de caracteres
predecibles, como los que aparecen en las direcciones de
correo electrónico, números de teléfono, códigos postales,
etc.
Definida por CustomValidator Comprueba la entrada de usuario utilizando la validación
el usuario lógica que ha escrito. Este tipo de validación permite
comprobar valores derivados en tiempo de ejecución.

En un formulario se pueden asociar más de un control de validación a un control. Por ejemplo, se podría
especificar que se requiera un control y que además contenga un intervalo de valores específico.
Existe un control relacionado, ValidationSummary, que no realiza ningún tipo de validación pero suele utilizarse
con otros controles de validación para mostrar los mensajes de error de todos los controles de validación de la
página juntos.

Lenguaje de Programación II. 1 / 31


Validación no-intrusiva en ASP.NET 4.5 y errores de validadores
Por defecto, ASP.NET 4.5 (con Visual Studio 2012) cambió la manera en la que funciona la validación de controles. Desde
fuera parece que nada ha cambiado, pero por debajo ahora se utiliza por omisión un nuevo tipo de validación no
intrusiva basada en jQuery, en lugar de los scripts anteriores.
Ahora, la validación de lado cliente se consigue de una manera más sencilla usando el plugin jQuery validation,
y decorando los diferentes controles de validación usando atributos "data-val", en lugar de llenar la página
de scripts de validación.
Por ejemplo, este es el HTML resultante de un control RequiredValidator cuando se está usando el modo de
validación no-intrusiva:

Sin embargo, si creas una nueva aplicación web vacía con Visual Studio 2012 o posterior y añades un control de
validación a alguna página, cuando ejecutes la aplicación verás esta página de error al intentar hacer cualquier
validación:

Lenguaje de Programación II. 1 / 31


Obtienes este error porque los scripts de validación necesitan un recurso de script registrado en el sistema con
el nombre "jquery", y no lo encuentran en tu aplicación. Para corregir el error necesitamos deshabilitar la
validación no-intrusiva para toda la aplicación. Para conseguirlo tenemos que agregar una línea a nuestro
archivo de configuración web.config, colocándola en el nodo appsettings, así:

Lenguaje de Programación II. 1 / 31


Guía #4: Conectando a Fuentes de Datos

III. MATERIALES Y EQUIPO

Para la realización de la guía de práctica se requerirá lo siguiente:

No. Requerimiento Cantidad


1 Guía de práctica #8: Conectando a Fuentes de Datos – Parte I 1
2 Computadora con Microsoft Visual Studio 2012 y Microsoft SQL Server 1
instalados.
3 Memoria USB o disco flexible 1

IV. PROCEDIMIENTO

Ejercicio #1 – Creación de base de datos usando SQL Server 2012 para que funcione como fuente de datos.

1. Proceda a iniciar la herramienta de Microsoft SQL Server Management Studio instalada en su


computadora.
2. Ubique a la base de datos “Bolsa_Trabajo”. Si esta base de datos ya existe, proceda a eliminarla.

3. Entre los recursos proporcionado para esta guía, ubique el script ( guia8.sql ) y de doble clic sobre este
archivo. Luego, presione el botón “! Execute” y espere hasta que en el inferior muestre la confirmación
de consulta ejecutada exitosamente.
De clic secundario sobre la carpeta Databases del Explorer del Gestor SQL y seleccione opción Refresh.
Confirme que se ha creado la base de datos “Bolsa_Trabajo”.

4. Expanda la base datos “Bolsa Trabajo”, de clic derecho sobre subcarpeta Database Diagrams y seleccione
opción New Database Diagram. Confirme en la ventana siguiente y agregue a c/u de las tablas.
Proceda a verificar mediante este diagrama a las relaciones entre las tablas, las cuales deben verse como
se muestra a continuación:

Lenguaje de Programación II. 8


Guía #4: Conectando a Fuentes de Datos

Lenguaje de Programación II. 9


Guía #4: Conectando a Fuentes de Datos

5. Inicia Microsoft Visual Studio y crea un nuevo Sitio Web vacio, denominado SitioWebdeSUCARNET.
Procederemos a configurar las condiciones de trabajo del mismo mediante la creación de carpetas y
archivos.
Para ello cree 4 carpetas en la raíz del sitio según el detalle de la siguiente tabla.

Carpeta El contenido de cada carpeta se encuentra como recurso


css de esta guía, por lo que debe de proceder a adicionar el
fonts contenido de cada una de las carpetas como ya lo ha
images realizado anteriormente.
js

Ejercicio #2 – Creación de conexión desde Visual Studio con el origen de dato.

6. Procederemos a crear la conexión de tal manera que esta se encuentre activa desde nuestra ventana. De
esta manera se podrá administrar los objetos de bases de datos desde el IDE.
Configuremos la cadena de conexión en nuestro archivo web.config, ya que de esta manera se podrá
mantener una sola cadena de conexión en todo el sitio. Edita el archivo web.config agregando las
siguientes líneas de código (observa el recuadro resaltado en la imagen a continuacion):

En la etiqueta “connectionString” coloca el valor de la cadena de conexión.


Lo que se acaba de realizar es la adición de las cadenas de conexión en el web.config de tal manera que se
encuentre disponible en todos nuestros archivos de código del proyecto. Esto es de suma utilidad ya que en casos
de que se necesite cambiar la cadena de conexión, únicamente se modifica este archivo a las nuevas referencias
de la fuente de datos, sin estar cambiando una a una las conexiones existentes.
La etiqueta de conexión describe una propiedad “name” la cual establece el nombre con la que estableceremos
nuestra conexión desde el código en C#. La propiedad “connectionString” establece la ruta al servidor de base
de datos y la base de datos misma.
Finalmente el “providerName” establece el espacio de nombres del proveedor de datos que utilizaremos para
la gestión de nuestra conexión.

7. Siempre en el archivo web.config procederemos agregar las siguientes líneas de código, que
necesitaran nuestros controles de validación ASP, ya que si no las encuentra en la aplicación nos dará
error por no deshabilitar la validación no-intrusiva para toda la aplicación. Para conseguirlo tenemos
que agregar una línea a nuestro archivo de configuración web.config, colocándola en el
nodo appsettings, así:

<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

Lenguaje de Programación II. 10


Guía #4: Conectando a Fuentes de Datos

Observe el resultado a continuacion:

Ejercicio #3 – Default.aspx

8. Ahora, proceda a agregar un nuevo Web Form con nombre “Default.aspx”, y luego digite el siguiente
marcado.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"


Inherits="WebApplication3.Default" %>

<!DOCTYPE HTML>
<html>
<head>
<title>Bolsa de Trabajo en Línea - Universidad Don Bosco</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
<script src="js/jquery.min.js"></script>
<script src="js/jquery.scrolly.min.js"></script>
<script src="js/jquery.dropotron.min.js"></script>
<script src="js/jquery.scrollex.min.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-layers.min.js"></script>
<script src="js/init.js"></script>
<noscript>
<link rel="stylesheet" href="css/skel.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/style-xlarge.css" />
</noscript>
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]-->
<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
</head>
<body>
<!-- Header -->
<header id="header" class="skel-layers-fixed">
<h1 id="logo"><a href="/">Página Principal</a></h1>
<nav id="nav">
<ul>
<li><a href="NuevaOferta.aspx" class="button
special">Nueva Oferta</a></li>
Lenguaje de Programación II. 11
Guía #4: Conectando a Fuentes de Datos

</ul>
</nav>
</header>
<!-- Main -->
<div id="main" class="wrapper style1">
<div class="container">
<header class="major">
<h2>Bolsa de Trabajo en Línea</h2>
<p>Universidad Don Bosco</p>
</header>
<!-- Formulario de Ingreso de Información -->
<section>
<form id="form1" runat="server">
<div class="row uniform 50%">

</div>
</form>
</section>
</div>
</div>
<!-- Footer -->
<footer id="footer">
<ul class="icons">
<li><a href="#" class="icon alt fa-twitter"><span
class="label">Twitter</span></a></li>
<li><a href="#" class="icon alt fa-facebook"><span
class="label">Facebook</span></a></li>
<li><a href="#" class="icon alt fa-envelope"><span
class="label">Email</span></a></li>
</ul>
<ul class="copyright">
<li>&copy; 2015. All rights reserved.</li>
</ul>
</footer>
</body>
</html>

9. Dentro del marcado anterior, ubique el div que tiene como clase “row uniform 50%” ya que es al interior
de este div que colocaremos el contenido de la página. Dentro de este div procederemos a crear 3
DropDownList, un botón y un GridView, por lo que digite el siguiente marcado dentro de este div.

<div class="4u 12u$(xsmall)">


Categoría
<div class="select-wrapper">
<asp:DropDownList
ID="ddlCategorias" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="3u 12u$(xsmall)">
Localidad
<div class="select-wrapper">
<asp:DropDownList
ID="ddlLocalidades" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="3u 12u$(xsmall)">
Empresa
<div class="select-wrapper">
Lenguaje de Programación II. 12
Guía #4: Conectando a Fuentes de Datos

<asp:DropDownList
ID="ddlEmpresas" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="2u 12u$(xsmall)">
<br />
<asp:Button ID="btnBuscar" runat="server"
Text="Buscar" Width="100%" CssClass="special"
OnClick="btnBuscar_Click" />
</div>
<asp:GridView ID="GridView1" runat="server"></asp:GridView>

10. Ahora, procederemos a configurar el GridView. En la barra inferior del área de trabajo, seleccione botón
Diseño. Ubique el control GridView1 y de clic en su botón de opciones.
11. Seleccione la opción de “Editar Columnas”, procederemos ahora a agregar una columna, para ello,
siempre en el editor de columnas, seleccione dentro del nodo “CommandField” a la opción de
“Seleccionar” y de clic en el botón de agregar.
Configura la nueva columna estableciendo a la propiedad “Header Text” el valor de “Editar”, como
“Button Type” seleccione “Image”, en la propiedad “SelectImageUrl” busque imagen
“edit_flat_icon.png” dentro de la carpeta “images”. Y dentro de la sección de estilos, despligue el nodo
“Control Style” y coloque un Width de 50px. De clic en Aceptar.

Lenguaje de Programación II. 13


Guía #4: Conectando a Fuentes de Datos

12. Procederemos ahora a agregar una nueva columna al GridView1, para ello, siempre en el editor de
columnas, agregue un nuevo CommandField de tipo Eliminar. Configure las siguientes propiedades:
• Nombre de columna “Header Text” con valor de “Eliminar”
• “Button Type” seleccione “Image”
• “DeleteImageUrl” busque “eliminar_icon_flat.png” dentro de la carpeta “images”.
• Dentro de la sección de estilos, despligue el nodo “Control Style” y coloque un Width de 40px.
De clic en Aceptar.

13. Ahora, procederemos a establecer dentro del GridView1 a su propiedad DataKeyNames, que es de
suma importancia, porque establece que el valor que devolverá por cada operación sea la llave de la
tabla.
Ubíquese en la vista de código dentro de la página Default.aspx y localice a la etiqueta de GridView1.
Dentro de su etiqueta, agregue a la propiedad “DataKeyNames” y asígne el valor de “Id Oferta”

Lenguaje de Programación II. 14


Guía #4: Conectando a Fuentes de Datos

14. Una vez concluido esto, nos resta programar los controles de DropDownList. Para ello, cree una nueva
clase con el nombre de “conexion.cs”, y digite el siguiente código. Tome especial cuidado de que se han
incluido los espacios de nombres orientados a datos como System.Data.SQLClient.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//--------------Namespace para trabajar con SQLServer--------------
using System.Data.SqlClient;
//------------------------------------------------------------------
using System.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace WebApplication3
{
public class conexion
{
private String cadenaConexion;
private SqlConnection conexionSQL;
private DataSet principal;
private SqlDataAdapter adaptador;

public conexion()
{
//Extrae las credenciales del webconfig
this.cadenaConexion =
ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
principal = new DataSet();
adaptador = new SqlDataAdapter();
}
//Función para realizar conexion a base de datos SQLserver
public bool conectar()
{
try
{
//crea objeto SQLConnection y enviar como paramentros las credenciales de
conexion
this.conexionSQL = new SqlConnection(this.cadenaConexion);
//abre la conexion a la base de datos SQLServer
this.conexionSQL.Open();
//inicializamos el parametro selectcommand del dataAdapter
adaptador.SelectCommand = new SqlCommand("SELECT * FROM ofertas", conexionSQL);
return true;
}
catch (Exception e)
Lenguaje de Programación II. 15
Guía #4: Conectando a Fuentes de Datos

{
return false;
}
}
//Metodo que verifica si el estado de la conexion es abierta o cerrada en la
aplicación.
public bool estadoConexion()
{

switch (this.conexionSQL.State)
{
case System.Data.ConnectionState.Broken:
return true;
case System.Data.ConnectionState.Open:
return true;
default:
return false;
}
}
public void desconectar()
{
//Cierra la conexion a la base de datos
this.conexionSQL.Close();
}

public void llenarCombo(ref DropDownList comboBox, String nombreTabla, String


campoValor, String campoTexto)
{
//asociamos el control con la fuente de datos
nombreTabla = nombreTabla.Trim();
comboBox.DataSource = principal;
comboBox.DataMember = nombreTabla;
comboBox.DataValueField = campoValor;
comboBox.DataTextField = campoTexto;
comboBox.DataBind();
}

//modo desconectado: funcion para almacenar tablas en la aplicacion


public void cargarTabla(String nombreTabla, String primaryKey)
{
nombreTabla = nombreTabla.Trim();
//si la tabla no existe
if (principal.Tables.IndexOf(nombreTabla) == -1)
{
//configuramos un dataAdapter como puente entre dataset y bdd
SqlDataAdapter _adaptador = new SqlDataAdapter();
_adaptador.SelectCommand = new SqlCommand();
_adaptador.SelectCommand.CommandText = "SELECT * FROM " + nombreTabla;
_adaptador.SelectCommand.Connection = conexionSQL;
_adaptador.SelectCommand.CommandType = CommandType.Text;

//llenando el dataset con la tabla obtenida


_adaptador.FillSchema(principal, SchemaType.Source, nombreTabla);
_adaptador.Fill(principal, nombreTabla);
_adaptador.SelectCommand.Dispose();
_adaptador.Dispose();

//obtenemos la tabla actual y establecemos el campo que sera la llave principal


DataTable actual;
actual = principal.Tables[nombreTabla];
DataColumn[] principales = new DataColumn[1];
Lenguaje de Programación II. 16
Guía #4: Conectando a Fuentes de Datos

principales[0] = actual.Columns[primaryKey];
actual.PrimaryKey = principales;
}
}

//copiamos varias tablas en la aplicacion


public void copiarBaseDatos()
{
//cargamos las tablas al dataset
cargarTabla("categorias", "nIdCategoria");
cargarTabla("municipios", "nIdMunicipio");
cargarTabla("empresas", "nIdEmpresa");
cargarTabla("ofertas", "nIdOferta");
}

//modo conectado: Metodo que muestra datos de una oferta en controles de EditarOferta.aspx
public void mostraroferta(int idOferta, ref DropDownList empresa, ref TextBox salario,
ref
TextBox toferta, ref DropDownList tcontrato,
ref DropDownList tjornada, ref DropDownList localidad, ref DropDownList tlocalidad, ref
DropDownList categoria, ref TextBox fecha,
ref TextBox vacantes, ref TextBox descripcion)
{
//objetos comando
SqlCommand comando = new SqlCommand();//tabla oferta
SqlCommand comando2 = new SqlCommand();//tabla empresa
SqlCommand comando3 = new SqlCommand();//tabla municipio
SqlCommand comando4 = new SqlCommand();//tabla categorias
SqlDataReader lector, lectorempresa, lectorlocalidad, lectorcategoria;
string idEmp = "", idlocalidad = "", idcategoria = "";
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = "select * from ofertas where nIdOferta=" + idOferta;
comando.Connection = this.conexionSQL;
try
{
//extra datos de la tabla Ofertas a controles asp y variables string.
lector = comando.ExecuteReader();
if (lector.HasRows)
{
while (lector.Read())
{
idlocalidad = lector["nIdLocalidad"].ToString();
idEmp = lector["nIdEmpresa"].ToString();
salario.Text = lector["fSalario"].ToString();
toferta.Text = lector["sTituloOferta"].ToString();
tcontrato.SelectedValue = (lector["nTipoContrato"].ToString());
tjornada.SelectedValue = (lector["nTipoJornada"].ToString());
tlocalidad.SelectedValue = (lector["nTipoLocalidad"].ToString());
idcategoria = lector["nIdCategoria"].ToString();
fecha.Text = lector["dFechaPublicacion"].ToString();
vacantes.Text = lector["nVacantes"].ToString();
descripcion.Text = lector["sDescripcion"].ToString();
}
lector.Close();
}
//Seleccion la opcion de empresa almacenada en base de datos en control
ddlempresa.
comando2.CommandType = System.Data.CommandType.Text;
comando2.CommandText = "select sNombreEmpresa from empresas where nIdEmpresa =
" + idEmp;
Lenguaje de Programación II. 17
Guía #4: Conectando a Fuentes de Datos

comando2.Connection = this.conexionSQL;
lectorempresa = comando2.ExecuteReader();
if (lectorempresa.HasRows)
{
while (lectorempresa.Read())
{
empresa.SelectedValue =

empresa.Items.FindByText(lectorempresa["sNombreEmpresa"].ToString()).Value;
}
}
lectorempresa.Close();
//Seleccion la opcion de municipio almacenada en base de datos en control
ddlmunicipio.
comando3.CommandType = System.Data.CommandType.Text;
comando3.CommandText = "select sNombreMunicipio from municipios where
nIdMunicipio = " + idlocalidad;
comando3.Connection = this.conexionSQL;
lectorlocalidad = comando3.ExecuteReader();
if (lectorlocalidad.HasRows)
{
while (lectorlocalidad.Read())
{
localidad.SelectedValue =

localidad.Items.FindByText(lectorlocalidad["sNombreMunicipio"].ToString()).Value;
}
}
lectorlocalidad.Close();
//Seleccion la opcion de categorias almacenada en base de datos en control
ddlcategorias.
comando4.CommandType = System.Data.CommandType.Text;
comando4.CommandText = "select sNombreCategoria from categorias where
nIdCategoria = " + idcategoria;
comando4.Connection = this.conexionSQL;
lectorcategoria = comando4.ExecuteReader();
if (lectorcategoria.HasRows)
{
while (lectorcategoria.Read())
{
categoria.SelectedValue =

categoria.Items.FindByText(lectorcategoria["sNombreCategoria"].ToString()).Value;
}
}
lectorcategoria.Close();
}
catch (SqlException error)
{
}
}
//modo conectado: Metodo que inserta nueva oferta a base de datos.
public int nuevaOferta(int nIdEmpresa, String sTituloOferta, int nTipoJornada, int
nTipoContrato,
double fSalario, int nIdLocalidad, int nTipoLocalidad, int nIdCategoria, String
fechaPublicacion,
String sDescripcion, String fechaContratacion, int nVacantes)
{
//Consulta Insert SQL a tabla ofertas
String queryInsert = "INSERT INTO ofertas(nIdEmpresa, sTituloOferta,
nTipoJornada,nTipoContrato, fSalario, " +
Lenguaje de Programación II. 18
Guía #4: Conectando a Fuentes de Datos

"nIdLocalidad, nTipoLocalidad, nIdCategoria, dFechaPublicacion, sDescripcion,


fechaContratacion, nVacantes)" +
"VALUES(@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12)";
SqlCommand comando = new SqlCommand();
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = queryInsert;
comando.Connection = this.conexionSQL;
try
{
//asigna los valores a los parametros utilizados en la consulta.
comando.Parameters.AddWithValue("@p1", nIdEmpresa);
comando.Parameters.AddWithValue("@p2", sTituloOferta);
comando.Parameters.AddWithValue("@p3", nTipoJornada);
comando.Parameters.AddWithValue("@p4", nTipoContrato);
comando.Parameters.AddWithValue("@p5", fSalario);
comando.Parameters.AddWithValue("@p6", nIdLocalidad);
comando.Parameters.AddWithValue("@p7", nTipoLocalidad);
comando.Parameters.AddWithValue("@p8", nIdCategoria);
comando.Parameters.AddWithValue("@p9", Convert.ToDateTime(fechaPublicacion));
comando.Parameters.AddWithValue("@p10", sDescripcion);
comando.Parameters.AddWithValue("@p11", Convert.ToDateTime(fechaContratacion));
comando.Parameters.AddWithValue("@p12", nVacantes);
//Realizar el insert a tabla ofertas desde la aplicación.
return comando.ExecuteNonQuery();
}
catch (SqlException error)
{
return 0;
}
}

//modo desconectado: funcion para modificar ofertas


public int actualizarOferta(int idOferta, int nIdEmpresa, String sTituloOferta, int
nTipoJornada,
int nTipoContrato,double fSalario, int nIdLocalidad, int nTipoLocalidad, int
nIdCategoria, String sDescripcion,
String fechaContratacion, int nVacantesa)
{
DataRow fila2Update;
DataTable tala;
tala = principal.Tables["ofertas"];

fila2Update = tala.Rows.Find(idOferta);
fila2Update[1] = nIdEmpresa;
fila2Update[2] = sTituloOferta;
fila2Update[3] = nTipoJornada;
fila2Update[4] = nTipoContrato;
fila2Update[5] = fSalario;
fila2Update[6] = nIdLocalidad;
fila2Update[7] = nTipoLocalidad;
fila2Update[8] = nIdCategoria;
fila2Update[10] = sDescripcion;
fila2Update[11] = fechaContratacion;
fila2Update[12] = nVacantesa;
if (principal.HasChanges())
{
SqlCommandBuilder comando = new SqlCommandBuilder(adaptador);
int filasAfectadas = adaptador.Update(principal, "ofertas");
principal.AcceptChanges();
return filasAfectadas;
}
Lenguaje de Programación II. 19
Guía #4: Conectando a Fuentes de Datos

return 0;
}

//modo conectado: funcion para eliminar


public int EliminarDatos(int IdOferta)
{
try
{
//Consulta SQL para eliminar registro de tabla Ofertas
String queryDelete = "DELETE FROM ofertas WHERE nIdOferta = @nIdOferta";
SqlCommand comando = new SqlCommand();
comando.Parameters.Clear();
//asigna los valores a los parametros utilizados en la consulta.
comando.Parameters.AddWithValue("@nIdOferta", IdOferta);
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = queryDelete;
comando.Connection = this.conexionSQL;
//Elimina registro de la tabla oferta desde la aplicación.
return comando.ExecuteNonQuery();
}
catch (SqlException error)
{
return 0;

}
}
public void CargarDatos(GridView dg, int categoria = 1, int municipio = 1, int empresa = 1)
{
string SQL;
//crea un DataTable para almacenar todos los registros de la consulta SQL.
DataTable t = new DataTable();
//Realiza consulta a varias tablas de base datos Bolsa de Trabajo.
SQL = "SELECT categorias.sNombreCategoria, ofertas.nIdOferta,
ofertas.sTituloOferta, " +
"nTipoContrato = CASE ofertas.nTipoContrato WHEN 1 THEN 'Permanente' WHEN 2
THEN 'Por proyecto' END, " +
"nTipoJornada = CASE ofertas.nTipoJornada WHEN 1 THEN 'Tiempo Completo'
WHEN 2THEN 'Por horas' END, " +
"ofertas.fSalario, ofertas.dFechaPublicacion,
empresas.sNombreEmpresa,municipios.sNombreMunicipio " +
"FROM municipios INNER JOIN ofertas ON municipios.nIdMunicipio
=ofertas.nIdLocalidad " +
"INNER JOIN empresas ON ofertas.nIdEmpresa = empresas.nIdEmpresa " +
"INNER JOIN categorias ON ofertas.nIdCategoria = categorias.nIdCategoria "
+
"WHERE categorias.nIdCategoria = @nIdCategoria AND municipios.nIdMunicipio
= @nIdMunicipio " +
"AND empresas.nIdEmpresa = @nIdEmpresa";
SqlCommand comando = new SqlCommand(SQL, conexionSQL);
//asigna los valores a los parametros utilizados en la consulta.
comando.Parameters.Clear();
comando.Parameters.AddWithValue("@nIdCategoria", categoria);
comando.Parameters.AddWithValue("@nIdMunicipio", municipio);
comando.Parameters.AddWithValue("@nIdEmpresa", empresa);
//Se almacena los datos de la tabla Ofertas en el DataTable
SqlDataAdapter dataAdaptador = new SqlDataAdapter(comando);
dataAdaptador.Fill(t);
//Se modifican los nombres de la columna del DataTable
t.Columns["sNombreCategoria"].ColumnName = "Nombre Categoria";
Lenguaje de Programación II. 20
Guía #4: Conectando a Fuentes de Datos

t.Columns["nIdOferta"].ColumnName = "Id Oferta";


t.Columns["sTituloOferta"].ColumnName = "Titulo Oferta";
t.Columns["nTipoContrato"].ColumnName = "Titulo Contrato";
t.Columns["nTipoJornada"].ColumnName = "Titulo Jornada";
t.Columns["fSalario"].ColumnName = "Salario";
t.Columns["dFechaPublicacion"].ColumnName = "Fecha Publicación";
t.Columns["sNombreEmpresa"].ColumnName = "Nombre Empresa";
t.Columns["sNombreMunicipio"].ColumnName = "Nombre Municipio";
//Se pasan los valores del DataTable a la datagridview
dg.Visible = true;
dg.DataSource = t;
dg.DataBind();
}
} //fin clase conexion
}

15. Declaremos de forma global al objeto conexionSQL, ingresando al archivo Default.aspx.cs y


escribiendo la siguiente declaración a nivel de la clase Default
conexion conexionSQL;

16. Ahora, proceda a programar el evento load de esta página agregando el siguiente código.

protected void Page_Load(object sender, EventArgs e)


{
conexionSQL = new conexion();
conexionSQL.conectar();
conexionSQL.copiarBaseDatos();
if (!Page.IsPostBack)
{
conexionSQL.llenarCombo(ref ddlCategorias, "categorias", "nIdCategoria",
"sNombreCategoria");
conexionSQL.llenarCombo(ref ddlLocalidades, "municipios", "nIdMunicipio",
"sNombreMunicipio");
conexionSQL.llenarCombo(ref ddlEmpresas, "empresas", "nIdEmpresa",
"sNombreEmpresa");

conexionSQL.desconectar();
}

17. Ahora, proceda a programar el evento clic del botón de buscar agregando el siguiente código.

protected void btnBuscar_Click(object sender, EventArgs e)


{
conexionSQL.CargarDatos(GridView1, int.Parse(ddlCategorias.Text),
int.Parse(ddlLocalidades.Text), int.Parse(ddlEmpresas.Text));
}

Lenguaje de Programación II. 21


Guía #4: Conectando a Fuentes de Datos

18. De manera similar, proceda a crear los siguientes métodos de evento del control GridView1. Estos nos
servirán para gestionar la selección y eliminación de registros desde este GridView.

protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)


{
int nIdOferta = Convert.ToInt32(GridView1.DataKeys[e.NewSelectedIndex].Value);
Response.Redirect(string.Format("EditarOferta.aspx?id={0}", nIdOferta));
}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)


{
int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values["Id
Oferta"].ToString());
conexionSQL.EliminarDatos(id);
GridView1.DataBind();
}

19. Ahora, procederemos a enlazar los dos eventos anteriores a las acciones del grid. Para ello agregue las
siguientes propiedades al marcado del GridView1.

Una vez hecho esto, proceda a ejecutar la página y filtre los datos con respecto a los que se almacenan
en la base de datos, seleccionando diferentes opciones de los 3 combos y presionando botón Buscar.
Cuando existan ofertas registradas que coincidan en los 3 criterios, se mostraran en la grilla
GridView1.

Ejercicio #4 – NuevaOferta.aspx

20. Cree un nuevo Web Form con el nombre de “NuevaOferta.aspx” y proceda a digitar el siguiente
marcado:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NuevaOferta.aspx.cs"
Inherits="WebApplication3.NuevaOferta" %>

<!DOCTYPE HTML>
<html>
<head>
<title>Bolsa de Trabajo en Línea - Universidad Don Bosco</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
<script src="js/jquery.min.js"></script>
<script src="js/jquery.scrolly.min.js"></script>
<script src="js/jquery.dropotron.min.js"></script>
<script src="js/jquery.scrollex.min.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-layers.min.js"></script>
<script src="js/init.js"></script>
<noscript>
<link rel="stylesheet" href="css/skel.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/style-xlarge.css" />
</noscript>
Lenguaje de Programación II. 22
Guía #4: Conectando a Fuentes de Datos

<!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]-->


<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
</head>
<body>
<!-- Header -->
<header id="header" class="skel-layers-fixed">
<h1 id="logo"><a href="/">Página Principal</a></h1>
<nav id="nav">
<ul>
<li><a href="Default.aspx" class="button
special">Listado de Oferta</a></li>
</ul>
</nav>
</header>
<!-- Main -->
<div id="main" class="wrapper style1">
<div class="container">
<h3>Nueva oferta de trabajo</h3>
<p>
Ingrese la información en los campos siguientes para adicionar una
nueva oferta de trabajo
</p>
<!-- Formulario de Ingreso de Información -->
<section>
<form id="form1" runat="server">
<div class="row uniform 50%">
<div class="6u 12u$(xsmall)">
<label>Empresa</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlEmpresas" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Título de la oferta</label>
<asp:TextBox ID="txtTituloOferta"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
ControlToValidate="txtTituloOferta" ForeColor="Red"
runat="server" ErrorMessage="Título de oferta
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Contrato</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoContrato"
runat="server">
<asp:ListItem
Value="1">Permanente</asp:ListItem>
<asp:ListItem Value="2">Por
Proyecto</asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Jornada</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoJornada"
runat="server">
Lenguaje de Programación II. 23
Guía #4: Conectando a Fuentes de Datos

<asp:ListItem Value="1">Tiempo
Completo</asp:ListItem>
<asp:ListItem Value="2">Por
Horas</asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Salario</label>
<asp:TextBox ID="txtSalario"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator2" ControlToValidate="txtSalario"
ForeColor="Red" runat="server"
ErrorMessage="Salario
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u$ 12u$(xsmall)">
<label>Localidades</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlLocalidades" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Localidad</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoLocalidad"
runat="server">
<asp:ListItem Value="1">Área</asp:ListItem>
<asp:ListItem
Value="2">Proximidad</asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Categoría</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlCategorias" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Fecha Contratación</label>
<asp:TextBox ID="txtFechaContratacion"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator3"
ControlToValidate="txtFechaContratacion" ForeColor="Red"
runat="server" ErrorMessage="Fecha de contratación
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u 12u$(xsmall)">
<label>Vacantes</label>
<asp:TextBox ID="txtVacantes"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator4" ControlToValidate="txtVacantes"
ForeColor="Red" runat="server"
Lenguaje de Programación II. 24
Guía #4: Conectando a Fuentes de Datos

ErrorMessage="Vacantes es campo
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u$ 12u$(xsmall)">
<label>Descripción de la plaza</label>
<asp:TextBox ID="txtDescripcion"
TextMode="MultiLine" Columns="10" runat="server"></asp:TextBox>
</div>
<div class="6u 12u$(xsmall)">
<asp:Button ID="btnBuscar" runat="server"
Text="Agregar Nueva Oferta" CssClass="special"
OnClick="btnBuscar_Click" />
</div>
<div class="12u 12u$(xsmall)">
<asp:ValidationSummary ID="ValidationSummary1"
DisplayMode="BulletList" runat="server" />
</div>
</div>
</form>
</section>
</div>
</div>
<!-- Footer -->
<footer id="footer">
<ul class="icons">
<li><a href="#" class="icon alt fa-twitter"><span
class="label">Twitter</span></a></li>
<li><a href="#" class="icon alt fa-facebook"><span
class="label">Facebook</span></a></li>
<li><a href="#" class="icon alt fa-envelope"><span
class="label">Email</span></a></li>
</ul>
<ul class="copyright">
<li>&copy; 2015. All rights reserved.</li>
</ul>
</footer>
</body>
</html>

21. Ahora, proceda a programar el evento load de la página NuevaOferta.aspx.cs, agregando el siguiente
código.

protected void Page_Load(object sender, EventArgs e)


{
conexion conexionSQL = new conexion();
conexionSQL.conectar();
conexionSQL.copiarBaseDatos();
if (!Page.IsPostBack)
{
conexionSQL.llenarCombo(ref ddlCategorias, "categorias", "nIdCategoria",
"sNombreCategoria");
conexionSQL.llenarCombo(ref ddlLocalidades, "municipios", "nIdMunicipio",
"sNombreMunicipio");
conexionSQL.llenarCombo(ref ddlEmpresas, "empresas", "nIdEmpresa",
"sNombreEmpresa");
}
conexionSQL.desconectar();
}

Lenguaje de Programación II. 25


Guía #4: Conectando a Fuentes de Datos

22. En el evento clic del botón, digite el siguiente código.

protected void btnBuscar_Click(object sender, EventArgs e)


{
int resultado = 0;
int nIdEmpresa = int.Parse(ddlEmpresas.SelectedValue.ToString());
String sTituloOferta = txtTituloOferta.Text;
int nTipoJornada = int.Parse(ddlTipoJornada.SelectedValue.ToString());
int nTipoContrato = int.Parse(ddlTipoContrato.SelectedValue.ToString());
double fSalario = double.Parse(txtSalario.Text.ToString());
int nIdLocalidad = int.Parse(ddlLocalidades.SelectedValue.ToString());
int nTipoLocalidad = int.Parse(ddlTipoLocalidad.SelectedValue.ToString());
int nIdCategoria = int.Parse(ddlCategorias.SelectedValue.ToString());
String sFechaPublicacion = DateTime.Now.ToString("yyyy-MM-dd");
String sFechaContratacion = txtFechaContratacion.Text;
String sDescripcion = txtDescripcion.Text;
int nVacantes = int.Parse(txtVacantes.Text);
conexion conexionSQL = new conexion();
conexionSQL.conectar();
resultado = conexionSQL.nuevaOferta(nIdEmpresa, sTituloOferta, nTipoJornada,
nTipoContrato, fSalario, nIdLocalidad, nTipoLocalidad, nIdCategoria,
sFechaPublicacion,
sDescripcion, sFechaContratacion, nVacantes);
conexionSQL.desconectar();
if (resultado == 1)
{
Response.Redirect("Default.aspx");
}
}

Ejercicio #5 – EditarOferta.aspx
23. Cree un nuevo Web Form con el nombre de “EditarOferta.aspx” y proceda a digitar el siguiente
marcado:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditarOferta.aspx.cs"
Inherits="WebApplication3.EditarOferta" %>

<!DOCTYPE html>
<html>
<head>
<title>Bolsa de Trabajo en Línea - Universidad Don Bosco</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
<script src="js/jquery.min.js"></script>
<script src="js/jquery.scrolly.min.js"></script>
<script src="js/jquery.dropotron.min.js"></script>
<script src="js/jquery.scrollex.min.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-layers.min.js"></script>
<script src="js/init.js"></script>
<noscript>
<link rel="stylesheet" href="css/skel.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="css/style-xlarge.css" />
</noscript>
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]-->
<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
</head>
<body>
<!-- Header -->
Lenguaje de Programación II. 26
Guía #4: Conectando a Fuentes de Datos

<header id="header" class="skel-layers-fixed">


<h1 id="logo"><a href="/">Página Principal</a></h1>
<nav id="nav">
<ul>
<li><a href="Default.aspx" class="button
special">Listado de Oferta</a></li>
</ul>
</nav>
</header>
<!-- Main -->
<div id="main" class="wrapper style1">
<div class="container">
<h3>Editar oferta de trabajo</h3>
<p>
Cambie la información, en los campos que desea modificar de la
oferta de trabajo
</p>
<!-- Formulario de Ingreso de Información -->
<section>
<form id="form1" runat="server">
<div class="row uniform 50%">
<div class="6u 12u$(xsmall)">
<label>Empresa</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlEmpresas" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Título de la oferta</label>
<asp:TextBox ID="txtTituloOferta"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1"
ControlToValidate="txtTituloOferta" ForeColor="Red"
runat="server" ErrorMessage="Título de oferta
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Contrato</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoContrato"
runat="server">
<asp:ListItem
Value="1">Permanente</asp:ListItem>
<asp:ListItem Value="2">Por
Proyecto</asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Jornada</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoJornada"
runat="server">
<asp:ListItem Value="1">Tiempo
Completo</asp:ListItem>
<asp:ListItem Value="2">Por
Horas</asp:ListItem>
</asp:DropDownList>
Lenguaje de Programación II. 27
Guía #4: Conectando a Fuentes de Datos

</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Salario</label>
<asp:TextBox ID="txtSalario"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator2" ControlToValidate="txtSalario"
ForeColor="Red"
runat="server" ErrorMessage="Salario
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u$ 12u$(xsmall)">
<label>Localidades</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlLocalidades" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Tipo de Localidad</label>
<div class="select-wrapper">
<asp:DropDownList ID="ddlTipoLocalidad" runat="server">
<asp:ListItem
Value="1">Área</asp:ListItem>
<asp:ListItem
Value="2">Proximidad</asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Categoría</label>
<div class="select-wrapper">
<asp:DropDownList
ID="ddlCategorias" runat="server">
</asp:DropDownList>
</div>
</div>
<div class="6u 12u$(xsmall)">
<label>Fecha Contratación</label>
<asp:TextBox ID="txtFechaContratacion"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator3"
ControlToValidate="txtFechaContratacion" ForeColor="Red"
runat="server" ErrorMessage="Fecha de contratación
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u 12u$(xsmall)">
<label>Vacantes</label>
<asp:TextBox ID="txtVacantes"
runat="server"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator4" ControlToValidate="txtVacantes"
ForeColor="Red"
runat="server" ErrorMessage="Vacantes es campo
obligatorio">*</asp:RequiredFieldValidator>
</div>
<div class="6u$ 12u$(xsmall)">
<label>Descripción de la plaza</label>
Lenguaje de Programación II. 28
Guía #4: Conectando a Fuentes de Datos

<asp:TextBox ID="txtDescripcion"
TextMode="MultiLine" Columns="10" runat="server"
TextChanged="eventhandler"></asp:TextBox>
</div>

<div class="6u 12u$(xsmall)">


<asp:Button ID="btnBuscar" runat="server"
Text="Actualizar datos de Oferta" CssClass="special"
OnClick="btnBuscar_Click" />
</div>

<div class="12u 12u$(xsmall)">


<asp:ValidationSummary ID="ValidationSummary1"
DisplayMode="BulletList" runat="server" />
</div>
</div>
</form>
</section>
</div>
</div>
<!-- Footer -->
<footer id="footer">
<ul class="icons">
<li>
<a href="#" class="icon alt fa-twitter"><span
class="label">Twitter</span></a></li>
<li><a href="#" class="icon alt fa-facebook"><span
class="label">Facebook</span></a></li>
<li><a href="#" class="icon alt fa-envelope"><span
class="label">Email</span></a></li>
</ul>
<ul class="copyright">
<li>&copy; 2015. All rights reserved.</li>
</ul>
</footer>
</body>
</html>

24. Ingrese al archivo EditarOferta.aspx.cs, y luego a nivel de la clase EditarOferta, declaremos de forma
global el objeto conexión, asi:
conexion conexionSQL = new conexion();

25. Ahora, proceda a programar el evento load de la página EditarOferta.aspx.cs, agregando el siguiente
código:

protected void Page_Load(object sender, EventArgs e)


{
int id = int.Parse(Request.QueryString["id"]);
conexionSQL.conectar();
conexionSQL.copiarBaseDatos();
if (!Page.IsPostBack)
{
conexionSQL.llenarCombo(ref ddlCategorias, "categorias",
"nIdCategoria", "sNombreCategoria");
conexionSQL.llenarCombo(ref ddlLocalidades, "municipios",
"nIdMunicipio", "sNombreMunicipio");
conexionSQL.llenarCombo(ref ddlEmpresas, "empresas", "nIdEmpresa",
"sNombreEmpresa");
Lenguaje de Programación II. 29
Guía #4: Conectando a Fuentes de Datos

conexionSQL.mostraroferta(id, ref ddlEmpresas, ref txtSalario, ref


txtTituloOferta, ref ddlTipoContrato, ref ddlTipoJornada, ref
ddlLocalidades, ref
ddlTipoLocalidad, ref ddlCategorias, ref txtFechaContratacion, ref
txtVacantes, ref
txtDescripcion);
conexionSQL.desconectar();
}
}

26. En el evento Click del botón btnBuscar, digite el siguiente código.

protected void btnBuscar_Click(object sender, EventArgs e)


{
int resultado = 0;
int id = int.Parse(Request.QueryString["id"]);
int nIdEmpresa = int.Parse(ddlEmpresas.SelectedValue.ToString());
String sTituloOferta = txtTituloOferta.Text;
int nTipoJornada = int.Parse(ddlTipoJornada.SelectedValue.ToString());
int nTipoContrato = int.Parse(ddlTipoContrato.SelectedValue.ToString());
double fSalario = double.Parse(txtSalario.Text.ToString());
int nIdLocalidad = int.Parse(ddlLocalidades.SelectedValue.ToString());
int nTipoLocalidad = int.Parse(ddlTipoLocalidad.SelectedValue.ToString());
int nIdCategoria = int.Parse(ddlCategorias.SelectedValue.ToString());
String sFechaContratacion = txtFechaContratacion.Text;
String sDescripcion = txtDescripcion.Text;
int nVacantes = int.Parse(txtVacantes.Text);
conexion conexionSQL = new conexion();
conexionSQL.conectar();
conexionSQL.copiarBaseDatos();
resultado = conexionSQL.actualizarOferta(id, nIdEmpresa, sTituloOferta,
nTipoJornada, nTipoContrato, fSalario, nIdLocalidad, nTipoLocalidad, nIdCategoria,
sDescripcion, sFechaContratacion, nVacantes);
conexionSQL.desconectar();
if (resultado == 1)
{
Response.Redirect("Default.aspx");
}

27. Proceda a ejecutar y recargar nuevamente la página desde el IDE de Visual Studio. Una vez cargada la
página procede a realizar las pruebas necesarias.

Lenguaje de Programación II. 30


Guía #4: Conectando a Fuentes de Datos

V. DISCUSION DE RESULTADOS

Observe el siguiente diagrama de clases.


A partir del mismo, elabore la base de datos registro_de_notas, y una aplicación web asp, donde se
pueda realizar los 4 mantenimientos básicos mostrar, insertar, actualizar y modificar de las notas de
los alumnos, utilizando acceso desconectado para la table examen y acceso conectado para las tablas
alumno y curso:

Entre los archivos de recursos de esta practica, se le proporciona el archivo de consulta


(BDD_Registro_de_notas.sql), con el cual podrá crear la bdd a utilizar para este ejercicio.

VI. BIBLIOGRAFÍA

1. Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje – Desarrollar con Visual Studio 2012 .
Barcelona: ENI.

Lenguaje de Programación II. 31

También podría gustarte