guia5 - Conectando a Fuentes de Datos – Parte II

UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
ESCUELA DE COMPUTACIÓN
CICLO: 01/2015
Nombre de la Práctica:
Lugar de Ejecución:
Tiempo Estimado:
MATERIA:
DOCENTES:
GUIA DE LABORATORIO #5
Conectando a Fuentes de Datos – Parte II
Centro de cómputo
2 horas con 30 minutos
Lenguaje de Programación II
Karens Medrano / Hugo Dimas
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 de los
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, o
borrado 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 / 20
Guía #4: Conectando a Fuentes de Datos – Parte I
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.
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
Lenguaje de Programación II
2
Guía #4: Conectando a Fuentes de Datos – Parte I
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.).
III. MATERIALES Y EQUIPO
Para la realización de la guía de práctica se requerirá lo siguiente:
No.
1
2
3
Requerimiento
Guía de práctica #4: Conectando a Fuentes de Datos – Parte I
Computadora con Visual Studio 2012 instalado
Memoria USB o disco flexible
Cantidad
1
1
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, una vez cargada, proceda a ejecutar el script que se le proporciona en los recursos de
esta guía. Asegúrese que la base de datos “Bolsa_Trabajo” no se encuentre creada, de ser así elimínela
y proceda a crearla nuevamente con la ayuda del script proporcionado. Cuando ya haya ejecutado
todas las querys, proceda a verificar mediante un diagrama las relaciones entre las tablas, las cuales
deben verse como se muestra a continuación:
Lenguaje de Programación II
3
Guía #4: Conectando a Fuentes de Datos – Parte I
Ejercicio #2 – Creación de conexión desde Visual Studio con el origen de datos a través del asistente.
1. Proceda a iniciar Microsoft Visual Studio desde su computadora. Una vez cargado el IDE en pantalla
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. Para ello, proceda a
iniciar el explorar de servidores, desde el menú “Ver”, “Explorador de Servidores”. Podrá observar
que se carga una nueva ventana listando los diferentes servidores asociados a la aplicación. El que nos
interesa por el momento es el que indica “Conexiones de datos”. Desde este punto procederemos a
agregar una nueva conexión, para ello proceda a dar clic derecho sobre el icono asociado a servidores
de base datos, automáticamente verá un menú emergente del cual deberá seleccionar la opción de
“Agregar conexión”.
2. Se nos mostrará una ventana donde se nos solicita especificar los parámetros de conexión a nuestro
servidor. Estos parámetros son los que se explican en la introducción teórica de esta guía de
laboratorio. Procederemos a llenar el formulario presentado de la siguiente forma: del campo de
servidor, seleccione el servidor asociado a su instancia de SQL Server instalada en su computadora.
Para la conexión al servidor se debe usar conexión con autenticación de Windows. Posteriormente
seleccione la base de datos que creo usted en el inicio de esta guía. La configuración anterior debe
quedar como muestra la siguiente imagen. Finalmente de clic en el botón de probar conexión el cual
nos indicara si se ha podido establecer la conexión y si esta ha sido satisfactoria y luego de clic en
Aceptar.
Lenguaje de Programación II
4
Guía #4: Conectando a Fuentes de Datos – Parte I
3. Una vez creada la conexión, procederemos a configurar 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.
Para ello, de clic derecho sobre la conexión antes establecida y proceda a dar clic en “Propiedades”
del menú emergente. Una vez se carguen las propiedades de la conexión, proceda a copiar la
propiedad “Cadena de conexión” de la ventana de propiedades. Debe conservar los datos en
memoria. Verifique la siguiente imagen.
Lenguaje de Programación II
5
Guía #4: Conectando a Fuentes de Datos – Parte I
4. Ahora, proceda a editar e archivo web.config de su sitio web, para agregar las siguientes líneas de
código. En la etiqueta “connectionString” debe colocar el valor de la cadena de conexión copiada en el
punto anterior. Al final debe quedarle como se muestra a continuación:
<connectionStrings>
<add name="CadenaConexion"
connectionString="Data Source=REEG;Initial Catalog=Bolsa_Trabajo;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
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.
5. Una vez creado nuestro sitio web, 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. El contenido de cada carpeta se encuentra como recurso de esta guía, por
lo que debe de proceder a adicionar el contenido de cada una de las carpetas como ya lo ha realizado
anteriormente.
Carpeta
css
fonts
images
js
6. Ahora, proceda a agregar un nuevo Web Form con nombre “Default.aspx”, y luego digite el siguiente
marcado.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
%>
<!DOCTYPE HTML>
<html>
Lenguaje de Programación II
6
Guía #4: Conectando a Fuentes de Datos – Parte I
<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>
</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
Lenguaje de Programación II
7
Guía #4: Conectando a Fuentes de Datos – Parte I
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>
7. 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"><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"/>
</div>
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
8. Ahora, procederemos a configurar el GridView agregado en el punto anterior, para ello, desde la
pestaña de opciones generales, seleccione la opción “Elegir origen de datos” y luego en “Nuevo
origen de datos”. Con esto, crearemos un control SQLDataSource que sea enlazado con el GridView.
En el cuadro de “Tipo de origen de datos” seleccione “Base de Datos” y colóquele como nombre
“SQLDataSource1”. Refiérase por las figuras.
Lenguaje de Programación II
8
Guía #4: Conectando a Fuentes de Datos – Parte I
9. En la ventana de conexión de datos, seleccione “cadenaConexion” que es la cadena que se configuro
anteriormente. Posteriormente se nos pedirá que ingresemos la consulta, para ello, seleccione
“Especificar una consula SQL…” e ingrese la siguiente consulta. Posteriormente de clic en siguiente.
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 2 THEN '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
10. Como usted puede ver anteriormente, en la anterior consulta se ha aplicado un filtro de 3 parámetros,
los cuales son representados por un símbolo de arroba (@) al principio. Estos tres filtros corresponden
a la categoría, empresa y municipio. El siguiente paso es indicarle a ASP que debe tomar el valor de
los parámetros desde los 3 controles DropDownList provistos con anterioridad. Para ello, para cada
uno de los parámetros, seleccione como “Origen de parámetro” el valor de “control”, y como
“ControlID” seleccione “ddlEmpresas” si el parámetro corresponde a empresas, “ddlCategorias” si el
parámetro corresponde a categorías y “ddLocalidades” si corresponde a las localidades. Como valor
por defecto coloque 1 en los tres casos. De clic en siguiente y luego en finalizar.
Lenguaje de Programación II
9
Guía #4: Conectando a Fuentes de Datos – Parte I
11. De clic en el botón de opciones del GridView1 y seleccione la opción de “Editar Columnas”, cambie el
nombre de cada una de las columnas que se muestran en la tabla a un nombre más natural. Además
para el campo de “Fecha de Publicación” cambie la propiedad “DataFormatString” a “{0:d}” y para el
campo de “Salario” coloque la misma propiedad en “${0}”. Guíese por la siguiente imagen:
12. Procederemos ahora a agregar una columna, para ello, siempre en el editor de columnas, seleccione
dentro del nodo “CommandField”, la opción de “Seleccinar”, de clic en el botón de agregar y proceda
a configurar la nueva columna estableciendo como “Header Text” el valor de “Editar”, como “Button
Type” seleccione “Image”, con la propiedad “SelectImageUrl” busque “edit_flat_icon.png” dentro de
Lenguaje de Programación II
10
Guía #4: Conectando a Fuentes de Datos – Parte I
la carpeta “images”. 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
11
Guía #4: Conectando a Fuentes de Datos – Parte I
13. Procederemos ahora a agregar una nueva columna, para ello, siempre en el editor de columnas,
agregue un nuevo CommandField de tipo Eliminar. Configure las propiedades como sigue: nombre
de coolumna “Header Text” con valor de “Eliminar”, como “Button Type” seleccione “Image”, con la
propiedad “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.
14. Ahora, procederemos a establecer una propiedad dentro del GridView1 que es de suma importancia,
ya que de esta manera, se le establece que el valor que devolverá por cada operación sea la llave de la
tabla, por lo que ubíquese en la vista de código dentro de la página Default.aspx y dentro de esta
ubique la propiedad “DataKeyNames”, si no existe digítela y luego asígnele el valor de “nIdOferta”
15. 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
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Web;
System.Data.SqlClient;
System.Configuration;
System.Web.UI.WebControls;
System.Data;
public class conexion
{
private String cadenaConexion;
private SqlConnection conexionSQL;
public conexion()
{
this.cadenaConexion =
ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString;
}
public bool conectar() {
try
{
Lenguaje de Programación II
12
Guía #4: Conectando a Fuentes de Datos – Parte I
this.conexionSQL = new SqlConnection(this.cadenaConexion);
this.conexionSQL.Open();
return true;
}
catch (Exception e) {
return false;
}
}
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() {
this.conexionSQL.Close();
}
public void getCategorias(ref DropDownList combobox)
{
SqlCommand comando = new SqlCommand();
SqlDataReader lector;
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = "SELECT * FROM categorias ORDER BY sNombreCategoria";
comando.Connection = this.conexionSQL;
try
{
combobox.Items.Clear();
lector = comando.ExecuteReader();
if (lector.HasRows)
{
while (lector.Read())
{
combobox.Items.Add(new ListItem(lector.GetString(1),
lector[0].ToString()));
}
lector.Close();
}
}
catch (SqlException error) {
}
}
public void getLocalidades(ref DropDownList combobox)
{
SqlCommand comando = new SqlCommand();
SqlDataReader lector;
Lenguaje de Programación II
13
Guía #4: Conectando a Fuentes de Datos – Parte I
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = "SELECT * FROM municipios ORDER BY sNombreMunicipio";
comando.Connection = this.conexionSQL;
try
{
combobox.Items.Clear();
lector = comando.ExecuteReader();
if (lector.HasRows)
{
while (lector.Read())
{
combobox.Items.Add(new ListItem(lector.GetString(1),
lector["nIdMunicipio"].ToString()));
}
lector.Close();
}
}
catch (SqlException error)
{
}
}
public void getEmpresas(ref DropDownList combobox)
{
SqlCommand comando = new SqlCommand();
SqlDataReader lector;
comando.CommandType = System.Data.CommandType.Text;
comando.CommandText = "SELECT * FROM empresas ORDER BY sNombreEmpresa";
comando.Connection = this.conexionSQL;
try
{
combobox.Items.Clear();
lector = comando.ExecuteReader();
if (lector.HasRows)
{
while (lector.Read())
{
combobox.Items.Add(new ListItem(lector.GetString(1),
lector.GetInt32(0).ToString()));
}
lector.Close();
}
}
catch (SqlException error)
{
}
}
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 )
{
String queryInsert = "INSERT INTO ofertas(nIdEmpresa, sTituloOferta, nTipoJornada,
Lenguaje de Programación II
14
Guía #4: Conectando a Fuentes de Datos – Parte I
nTipoContrato, fSalario, 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
{
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", fechaPublicacion);
comando.Parameters.AddWithValue("@p10", sDescripcion);
comando.Parameters.AddWithValue("@p11", fechaContratacion);
comando.Parameters.AddWithValue("@p12", nVacantes);
return comando.ExecuteNonQuery();
}
catch (SqlException error) {
return 0;
}
}
}
16. Ahora, proceda a programar el evento load de la página agregando el siguiente código.
protected void Page_Load(object sender, EventArgs e)
{
conexion conexionSQL = new conexion();
conexionSQL.conectar();
if (!Page.IsPostBack) {
conexionSQL.getCategorias(ref ddlCategorias);
conexionSQL.getLocalidades(ref ddlLocalidades);
conexionSQL.getEmpresas(ref ddlEmpresas);
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)
{
GridView1.DataBind();
}
18. Ahora, proceda a crear los siguientes métodos al código siempre al mismo nivel del código del evento
Load. Estos nos servirán para gestionar la selección y eliminación de registros desde el GridView.
Lenguaje de Programación II
15
Guía #4: Conectando a Fuentes de Datos – Parte I
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)
{
SqlDataSource1.DeleteCommand = "DELETE FROM ofertas WHERE nIdOferta = @nIdOferta";
SqlDataSource1.DeleteParameters.Add("nIdOferta",
GridView1.DataKeys[e.RowIndex].Values["nIdOferta"].ToString());
SqlDataSource1.Delete();
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.
20. Cree un nuevo Web Form con el nombre de “NuevaOferta.aspx” y proceda a digitar el siguiente
marcado:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="NuevaOferta.aspx.cs"
Inherits="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>
<!--[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>
Lenguaje de Programación II
16
Guía #4: Conectando a Fuentes de Datos – Parte I
<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">
<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"
Lenguaje de Programación II
17
Guía #4: Conectando a Fuentes de Datos – Parte I
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>
<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>
Lenguaje de Programación II
18
Guía #4: Conectando a Fuentes de Datos – Parte I
</section>
</div>
</div>
<!-- Footer -->
<footer id="footer">
<ul class="icons">
<li><a href="#" class="icon
class="label">Twitter</span></a></li>
<li><a href="#" class="icon
class="label">Facebook</span></a></li>
<li><a href="#" class="icon
class="label">Email</span></a></li>
</ul>
<ul class="copyright">
<li>&copy; 2015. All rights
</ul>
</footer>
alt fa-twitter"><span
alt fa-facebook"><span
alt fa-envelope"><span
reserved.</li>
</body>
</html>
21. En el evento Load, digite el siguiente código.
protected void Page_Load(object sender, EventArgs e)
{
conexion conexionSQL = new conexion();
conexionSQL.conectar();
if (!Page.IsPostBack)
{
conexionSQL.getCategorias(ref ddlCategorias);
conexionSQL.getLocalidades(ref ddlLocalidades);
conexionSQL.getEmpresas(ref ddlEmpresas);
}
conexionSQL.desconectar();
}
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);
Lenguaje de Programación II
19
Guía #4: Conectando a Fuentes de Datos – Parte I
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");
}
}
23. Proceda a ejecutar la página, si le da problemas con los campos de validación, proceda a corregirlos
tal y como se muestra en la guía número 3.
1.
V. BIBLIOGRAFÍA
Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje – Desarrollar con Visual Studio 2012 .
Barcelona: ENI.
Lenguaje de Programación II
20