Está en la página 1de 29

CONEXIONES WEB EN ASP.NET, PHP Y SERVLETS CON MICROSOFT SQL SERVER 2008, MYSQL 5.0 Y POSTGRESQL 8.

2 Por: Domnguez Geniz Amalio Javier

Geniz & Margen Software 2008. Todos los derechos reservados. Los logotipos y marcas utilizadas son marcas registradas de sus respectivas empresas.

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

Introduccin
El presente trabajo pretende dar a conocer los mtodos principales y mas utilizados dentro de las aplicaciones web, en este caso se dar una pequea pero muy practica introduccin a la conexin de las bases de datos con lenguajes web y tambin la forma de manipular cdigo SQL que nos permitir manipular a la base de datos desde una aplicacin web. En primer lugar empezaremos con uno de los lenguajes que han tenido mucho auge en los ltimos aos, que adems es una tecnologa de software libre y que utiliza como lo lenguaje de programacin a JAVA junto con todo su potencial, por supuesto nos referimos a los Servlets y paginas JSP. En este primer apartado aprender a conectar una base de datos de PostgreSQL 8.2 mediante Java DataBase Connectivity. Despus de haber logrado el primer ejercicio veremos como de manera anloga se conecta una base de datos del reconocido y mas famosos gestor de Base de Datos de Cdigo Abierto, denominado MySQL. Utilizaremos un script de PHP y las instrucciones principales que utiliza este tipo de lenguajes tambin Open Source. Para finalizar realizaremos una conexin entre software propietario utilizando la plataforma Microsoft.NET, en este ultimo apartado la conexin estar realizada por SQL Server y C#, mediante ADO.Net y aprenderos porque ASP.Net ha sido una de las tecnologas mas importantes y utilizadas desde hace ya tiempo atrs. Nota: Estos cdigos fueron compilados por IDEs, para la aplicacin de JAVA (Servlet y JSP) se utilizar Sun Java Studio Enterprise, para PHP utilizaremos NetBeans Early Access for PHP y para ASP.Net ser Microsoft Visual Web Developer.

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

Base de datos.
Antes de empezar a codificar directamente sobre alguno de los lenguajes antes mencionados, empezaremos por crear nuestras tres bases de datos en nuestros SGBD. Cada una de ellas ser creada por el DDL. Por el momento no se preocupe por las relaciones ni por otra cuestin de diseo, solo utilizaremos una tabla a manera de ejemplo y con una llave primaria tan solo para conservar la integridad. Si desea aprender SQL Avanzado le recomiendo leer mi manual titulado Aprendiendo SQL en N Diapositivas.

POSTGRESQL
create database diplomado; CREATE TABLE usuarios ( id serial NOT NULL PRIMARY KEY, nombre character varying(35), edad character varying(10), direccion character varying(35), correo character varying(35) ) WITHOUT OIDS; ALTER TABLE usuarios OWNER TO postgres;

MySQL
create database diplomado; use diplomado; create table usuarios( id int not null PRIMARY KEY auto_increment, nombre varchar(35), correo varchar(35), edad varchar(10), direccion varchar(35));

SQL Server
create database diplomado; use diplomado; create table usuarios( id int not null PRIMARY KEY identity(1,1), nombre varchar(35), correo varchar(35), edad varchar(10), direccion varchar(35));

Como podemos observar las tres bases de datos son casi iguales, la diferencia radica en el tipo de dato de la llave primaria que en todas ellas es un valor auto numrico, pero que se define de diferente manera para cada una de ellas.

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

Conexin JSP y Servlets de JAVA con PostgreSQL 8.2

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

/* Esta primera pgina llamada Index.jsp va a ser nuestra pagina inicial, ya que en toda aplicacin web siempre iniciara con un ndice(index), esta pagina al ser ejecutada solo mostrar texto plano y un link que nos vinculara a la siguiente pgina que realmente son las pginas que realizarn todo el trabajo. */

Index.jsp
/* Las siguientes lneas de cdigo son solo Comentarios generados por el IDE */ <%-Document : index Created on : 04-oct-2008, 13:56:21 Author : Geniz --%> /* Para iniciar, incluiremos directivas de pgina (<%@ %>)) que en este caso se encargarn de la codificacin de nuestra pagina JSP */ <%@page contentType="text/html" pageEncoding="UTF-8"%> /* <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
/* El cdigo restante es solo HTML estndar.*/

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Curriculum JSP</title> </head> <body background="Fondojsp.png"> <center><h1>Bienvenido a mi Curriculum en JAVA</h1> <h2> Autor:Geniz</h2></center> <br /><hr /> <h3>Detalles:<br /> Lenguaje de Programacion: JAVA<br> Base de Datos: PostgreSQL 8.2<br /> Servidor: GlassFish v2<br /> Puerto: 8080<br /> Path: http://localhost:8081/Curriculem_Servlet_JSP/index.jsp<br /></h3> <br><br> <center><a href="Nuevo.jsp">Continuar</a></center> </body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

/* Conexiones.java es el archivo pilar de nuestra primera aplicacin, en el esta definida una clase de java llamada conexiones que contiene los mtodos principales para la conexin y manipulacin de la base de datos. */

Conexiones.java
/* * @author MSS */ /* Importamos las bibliotecas de java a utilizar, import javax.swing nos servir para el envo de mensajes, import java.sql es una librera especial que contiene los objetos para realizar la conexin y por ultimo importamos el nombre de nuestro Driver JDBC para postgresql. */ import javax.swing.*; import java.sql.*; import org.postgresql.Driver; /* Iniciamos la superclase, recuerde que debe ser nombrada con el mismo nombre que con el que guardar el archivo. */ public class Conexiones { /* En las siguientes tres lneas de cdigo definimos objetos, el primero es un objeto Connection el cual guardara nuestra ruta, nombre de usuario y contrasea de la base de datos, el objeto Statement ser el encargado de ejecutar las consultas mientras que ResultSet almacenar los datos que fueron solicitados por Statement. No olvide importar la librera SQL ya que estos objetos estn dentro de ella y de no importarla estos sern marcados como errores. */ static Connection conexion; static Statement sentencia; static ResultSet resultado; /* Iniciamos nuestro mtodo llamado conecta, que ser el encargado de establecer la conexin, controlados por un bloque try que nos avisara cuando la conexin se haya establecido o si algo ha fallado. */

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

public static void conecta(){ try { /* Cargamos el controlador jdbc de postgres a travs de class.forName, el controlador deber estar registrado en la classpath */ Class.forName( "org.postgresql.Driver" ); } catch( Exception e ) { // Avisamos que el puente no se ha podido cargar en caso de que esto suceda JOptionPane.showMessageDialog(null,"No se pudo cargar el puente JDBC-ODBC." ); return; }try{ /* Establecemos la conexin a travs de la clase DriverManager y de su propiedad getConnection, aqu debemos seguir el formato que nos establece el driver, en primer lugar pondremos la ruta especificando el puerto y el nombre de la BD, el 2 parmetro es el nombre de usuario y por ultimo la contrasea del mismo. Todos ellos debern ser datos de tipo cadena.*/ conexion=DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/diplomado", "postgres", " *********** " ); /* Una vez establecida la conexin invocaremos al mtodo createStatement de Connection, el cual nos devolver un objeto Statement. */ sentencia=conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_ READ_ONLY ); /* En las siguientes lneas enviaremos mensajes para avisar que la conexin se estableci o en caso contrario mostraremos las posibles fallas, para ello el cdigo se encuentra en un bloque try. */ JOptionPane.showMessageDialog (null, "Conexin establecida"); } catch (Exception er){JOptionPane.showMessageDialog (null, "Error de conexion" ); } } /* Por ultimo construiremos un mtodo denominado alta al que pasaremos como parmetro una cadena de texto, utilizar la conexin activa y un objeto Statement para ejecutar consultas del tipo DML. En caso de utilizar DDL o DCL utilizaremos el mtodo executeUpdate de Statement. */ public static void alta(String cadena) { // Verificamos que haya conexin activa, en caso contrario se realizara una nueva conexin. if (conexion==null) { conecta(); } try{ // Ejecutamos la consulta recibida sentencia.execute(cadena); } catch(Exception er){

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

/* Atraparemos la excepcin lanzada por java en caso de que no se haya ejecutado la consulta y se la mostraremos al usuario. */ JOptionPane.showMessageDialog(null, "Lo sentimos su operacin solicitada no se pudo realizar debido a un error de "+er); } } }

/* El siguiente archivo ser el encargado de recoger los datos introducidos por el usuario, en el crearemos un objeto form que invocar al Servlet guardar a travs de una peticin POST de HTTP, aunque podramos tambin utilizar al mtodo GET de HTT P , en caso de no especificar ninguna accin al botn ejecutar un retorno de formulario. Aqu es importante recordar la propiedad name de los objetos ya que ser utilizado por el Servlet para almacenar los valores. Adems observaremos que todo el cdigo es solo HTML lo cual nos indica que nuestra pagina tambin puede ser creada con HTML y tener esta extensin por ejemplo: Nuevo.html */

Nuevo.jsp
<%-Document : Nuevo Created on : 04-oct-2008, 14:23:11 Author : Geniz --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Nuevo Registro</title> </head> <body background="Fondojsp.png"> <h2>Por Favor llene los siguientes datos:</h2>
/*No olvide indicar la accin y el mtodo, en caso de no ponerlo se ejecutar un retorno de formulario como accin y el tipo de peticin ser GET. Note que para invocar a un Servlet solo se deber poner el nombre del archivo sin ninguna extensin. Tambin recuerde que debe escribirse tal y como esta nombrado distinguiendo maysculas y minsculas, tambin trate de usar solo rutas relativas y no absolutas */

<form name="f1" action="Guardar" method="POST"> <table border="0"> <tbody> <tr> <td> Nombre:</td> <td>Edad</td> <td>Direccion:</td>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

<td>Correo electronico:</td> </tr><tr> <td> <input type="text" name="nombre" value="" /></td> <td> <input type="text" name="edad" value="" /></td> <td><input type="text" name="direccion" value="" /></td> <td> <input type="text" name="correo" value="" /></td> </tr></tbody></table> <input type="submit" value="Guardar" name="b1" /> </form> </body> </html>

/* Otra posible manera de hacer la interfaz seria utilizando Servlets como lo muestra el siguiente cdigo fuente: */ try { String formulario[]={"<html><head><title>Nuevo Usuario</title></head><body>", "<form id=\"form1\" name=\"form1\" method=\"post\" action=\"SaveUser\">", "Nombre: <input type=\"text\" name=\"nombre\" value=\"\"><br>", "Correo: <input type=\"text\" name=\"correo\" value=\"\"><br>", "Edad: <input type=\"text\" name=\"edad\" value=\"\"><br>", "Direccion: <input type=\"text\" name=\"direccion\" value=\"\"><br>", "<input type=\"submit\ value=\"guardar\"><br>", "</form></body></html>"};

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

/* Como podemos observar en el cdigo fuente, el formulario se encuentra dentro de un arreglo de cadenas de texto y despus por medio de un bucle y utilizando el mtodo lenght que nos devolver un tipo int con el tamao del arreglo imprimiremos los controles por medio del mtodo println de nuestro flujo de salida (out). */ for(int i=0; i<=formulario.lenght;i++){ out.println(formulario[i]); } /* Guardar.java es el Servlet encargado de recoger los datos de Nuevo.jsp, almacenarlos y enviarlos a la consulta que ser ejecutada por Statement. Ntese que un Servlet no contiene a una clase principal como alguna aplicacin JAVA ya que estos son invocados por peticiones de HTTP. */

Guardar.java
/* * @author Geniz */ /* Importamos las bibliotecas de java, java.io manipular los flujos de entrada y salida, mientras que javax.servlet y javax.servlet.http utilizarn la API de los Servlet para utilizar sus atributos y mtodos, adems de las peticiones HTTP ya sea POST, GET u otra. */ import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*;
//Definimos nuestro Servlet y heredamos los atributos de HttpServlet

public class Guardar extends HttpServlet { /* Creamos un mtodo llamado processRequest, que recibe como argumentos a un objeto HttpServletRequest y otro HttpServletResponse, el primero se encargara de recoger y almacenar los datos que se encuentren en Nuevo.jsp, mientras que response se encargara de devolver una respuesta a la peticin, en este caso devolver una pgina HTML, este tipo de mtodos tendr que estar protegido forzosamente contra posibles excepciones mediante la palabra reservada throws. */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* Le diremos al objeto response el tipo de respuesta y el juego de caracteres que devolver en este caso texto y contenido HTML con el juego de caracteres UTF-8 que se refiere al juego UNICODE ligeramente modificado, aunque tambin puede devolver CSS y XML. */ response.setContentType("text/html;charset=UTF-8"); /* Crearemos un flujo de salida out el cual escribir el contenido de la respuesta (pgina HTML), para ello utilizaremos el mtodo getWriter del objeto response y se lo asignaremos a nuestro flujo de salida out que es de la clase PrintWriter. */

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

10

PrintWriter out = response.getWriter(); /* Ahora almacenaremos el contenido de los input text en cadenas mediante el objeto request e invocando a su metodo getParameter, el cual recibe como argumento el nombre de nuestros cuadros de textos de HTML, debido a que en la BD los datos son de tipo cadena no es necesaria conversin alguna, pero si por ejemplo almacenramos un ID que son nmeros tendramos que invocar al mtodo parseInt de la clase Integer, por ejemplo: int id = Integer.parseInt(request.getParameter("id")); y con esta lnea de cdigo obtendramos el id de nuestra tabla. */ try { String nombre=request.getParameter("nombre"); String edad=request.getParameter("edad"); String direccion=request.getParameter("direccion"); String correo=request.getParameter("correo"); /* Una vez almacenados los datos en variables enviaremos una consulta DML a nuestro mtodo Alta de nuestra clase Conexiones que contiene un objeto Statement que ser el encargado de ejecutarla, podemos ver que las variables van encerradas entre comillas simples y dobles, las primeras son para especificar a postgres (o cualquier otro SGBD) que se trata de una cadena de texto y las segundas indican lo mismo, pero ahora a JAVA. Para la insercin de nmeros solo restara omitir las comillas simples. Adems tambin especificamos los campos en los que vamos a realizar la insercin de datos, como pudo notar cuando definimos la tabla algunos campos estn en diferente orden y adems tenemos un campo llamado id que es auto numrico y es por ello que no necesitaremos insertar algn dato en el, as que en esta consulta definimos el orden de los campos y de su manipulacin.*/ String consulta = "INSERT INTO usuarios (nombre, ('"+nombre+"','"+edad+"','"+direccion+"','"+correo+"')"; //Enviamos la consulta al mtodo alta Conexiones.alta(consulta); /* Imprimimos la respuesta, mostrando dos links uno para ver los registros y otro para insertar uno nuevo */ out.println("<h2><center><br>Alta Registrada"); out.println("<br><br><a href=Listar>Ver Usuarios</a><br><br>"); out.println("<a href=Nuevo.jsp>Nuevo Usuario</a><br><br>"); /* Cerramos el flujo out a travs de close, encerrado en un bloque finally para indicar que pase lo que pase este tendr que ser cerrado*/ } finally { out.close(); } } edad, direccion, correo) VALUES

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

11

/* Finalmente invocamos al metodo processRequest a traves de una peticion POST de HTTP, esto lo haremos mediante doPost, de forma anloga podramos invocar al mtodo GET con doGet y de igual manera podramos invocar a cualquier tipo de peticin HTTP como doTrace, doPut, etc. Tambin es posible invocar a varios mtodos en el mismo cdigo y ya ser el Servlet el encargado de elegir la mejor opcin. Recuerde pasar los parmetros response y request.*/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }

/* En este ultimo archivo, la mayora de las instrucciones ya fueron explicadas anteriormente solo fijaremos nuestra atencin en las instrucciones nuevas. Listar.java ser el responsable de mostrar lo datos de la tabla mediante el objeto ResulSet */

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

12

Listar.java
import java.io.*; import java.net.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import javax.swing.*; /** * * @author Geniz */ public class Listar extends HttpServlet { static Connection conexion=null; static Statement sentencia=null; static ResultSet rs=null; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { Class.forName( " org.postgresql.Driver ").newInstance(); JOptionPane.showMessageDialog(null,"No se pudo cargar el puente JDBC-ODBC." ); //return; conexion = Conexiones.conexion; sentencia = Conexiones.conexion.createStatement(); JOptionPane.showMessageDialog(null,"Conexion establecida"); } catch(Exception er){ JOptionPane.showMessageDialog(null,"Error de conexion" ); } try{
/* Almacenamos la consulta en una cadena, despus se la enviamos al objeto llamado sentencia de la clase Conexiones para que la ejecute a travs del mtodo executeQuery, que funciona igual que su mtodo execute, y los resultados recibidos los almacenaremos en el ResulSet */

String consulta="select * from usuarios"; rs = Conexiones.sentencia.executeQuery(consulta);

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

13

/* Despus utilizando al mtodo next de ResulSet, procederemos a extraer los datos mediante el atributo getString de este objeto, el cual devuelve una cadena, podemos especificar el nombre del campo como en el ejemplo o tambin podramos especificar el ndice por ejemplo: rs.getString(0); o en un caso mas especifico utilizar getInt, getBoolean, getDate, preste especial atencin si utiliza alguno de estos mtodos ya que debe tener en cuenta que deber utilizar tipos de datos especiales. */

while(rs.next()){ out.println(rs.getString("nombre")); out.println(rs.getString("edad")); out.println(rs.getString("direccion")); out.println(rs.getString("correo")); out.println("<br><hr>"); } out.println("<a href=Nuevo.jsp>Agregar Nuevo</a>"); } catch(Exception er){ JOptionPane.showMessageDialog(null,"Error de conexion" ); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

14

Conexin PHP con MySQL 5.0

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

15

/* Index.php al igual que el index.jsp fungir como la pagina inicial y solo mostrara texto plano y un link que nos vinculara a la pagina que ser la encargada de almacenar los datos, php es un lenguaje tipo script del lado del servidor y este al igual que JSP nos dar la libertad de mezclar PHP con HTML. Recuerde que el cdigo de PHP deber estar entre <?php y ?>. */

Index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Curriculum PHP</title> </head> <body background="fondophp.png"> <?php echo("<center><h1>Bienvenido a mi curriculum en PHP</h1></center>"); ?> Autor:Geniz<br ><hr> Detalles:<br > Languaje: PHP<br> Base de Datos: MySQL 5<br > Servidor: Apache 2.2, PLataforma Lampp (XAMPP 1.6)<br > Puerto: 80<br > Path: http://localhost/phpproject/index.php<br > <br><br> <center><a href="Datos.html">Continuar</a></center> </body>

</html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

16

/* Conexiones.php es un archivo que solo contiene una lista de variables inicializadas, las cuales contienen las principales referencias a utilizar para la conexin con la base de datos. */

Conexiones.php
<?php $servidor="127.0.0.1"; $usuario="root"; $password=""; $conexion=mysql_connect($servidor,$usuario,$password); $basedatos="diplomado"; $consultaver="select * from usuarios"; ?>
/*La siguiente pagina es la interfaz en la que el usuario escribir sus datos, Ahora notara que es solo una pagina HTML, y como podr recordar en la parte de Servlet y JSP mencionamos que JAVA tambin podra ocupar un archivo HTML con lo que podremos decir que esta pagina tambin nos servira para JAVA. */

Datos.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Nuevo Registro</title></head> <body background="fondophp.png"> <br><br><h2 align="center">Por Favor llene los siguientes datos:</h2> <form name="f1" action="insertar.php" method="POST"> <div align="center"> <table width="200" border="0"> <tr> <td>Nombre:</td> <td><input type="text" name="nombre" value="" /></td> </tr> <tr> <td>Edad</td> <td><input type="text" name="edad" value="" /></td> </tr> <tr> <td>Direccion:</td> <td><input type="text" name="direccion" value="" /></td> </tr> <tr> <td>Correo Electronico: </td> <td><input type="text" name="correo" value="" /></td> </tr> </table> </div> <p align="center">&nbsp;</p> <div align="center"> <input type="submit" value="Guardar" name="b1" /> </div> </form></body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

17

/* Insertar.php es el script que har la consulta SQL a MySQL, para ello seguir el siguiente procedimiento: 1. Recoger los datos del archivo Datos.html, 2. Guardar los valores a travs de request en variables, 3. Realizar la conexin a MySQL y por ultimo enviar la consulta al Manejador de BD. */

Insertar.php
<html> <head> <title>insertarndo...</title> </head> <body background="fondophp.png">
//Iniciamos nuestro script a travs de <?php y ?>

<?php
/* Solicitamos los campos pedidos en Datos.html, adems incluiremos el archivo conexiones.php que contiene las variables con los datos para la conexin, lo incluiremos a travs de la funcin require_once, aunque tambin pudimos usar include. No olvide que PHP distingue caracteres as que recuerde poner bien maysculas y minsculas, adems de que cada lnea debe terminar con ; */

require_once("Conexiones.php"); $nombre=$_REQUEST["nombre"]; $edad=$_REQUEST["edad"]; $direccion=$_REQUEST["direccion"]; $correo=$_REQUEST["correo"];


/* A travs de la funcin mysql_connect estableceremos el enlace con mysql, para ello no necesitara instalar un conector especial ya que viene incluido en PHP por medio de la plataforma LAMP que adems contiene al servidor apache. */

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

18

mysql_connect($servidor,$usuario,$password);
/* Una ves establecida la conexin procederemos a ejecutar la consulta invocando a la funcin mysql_db_query que recibe como parmetros el nombre de la base de datos y despus la consulta */

mysql_db_query($basedatos,"insert into usuarios(nombre,edad,direccion,correo) values('$nombre','$edad','$direccion','$correo')"); $debug=true;


/* La siguiente condicin servir de manera anloga a un bloque try. Se encargar de hacernos saber si algo fallo en el proceso de conexin o de ejecutar la consulta invocando a la funcin mysql_error */

if(sdebug) { echo"<p>--GENIZ SOFTWARE FOUNDATION && MARGEN SOFTWARE SOLUTIONS-</p>".mysql_error(); } ?> <div align=center> <h2><font color="green">TU </font><b><font color="green" size="5">Registro se ha grabado en la BD</font></b></h2> </div><br> <br>
/* Una vez pasado el proceso anterior mostraremos dos links al usuario para que puedad ver la informacin de la tabla o si lo prefiere agregar mas datos */

<div align=center><font color=green size=3><a href=leer.php>Visualizar el contenido de la tabla </div> <div align=center><font color=green size=3><a href=Nuevo.php>Agregar otro registro</div> </body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

19

/* Para concluir con PHP y MySQL crearemos una pagina que se encargar de hacer una consulta a la base de datos con la finalidad de mostrar los registros que hay en la tabla. Por supuesto que de eso se encargara leer.php */

Leer.php
<html> <head><title>leer.php</title></head> <body > <center> <b><font color="green" size="5">DATOS ALMACENADOS <BR> </font></b><b><font color="green" size="5"><BR> </font></b> <center> <table cellspacing=3 cellpadding=3 border=0> <tr><td><TR><TD><TD>
/* Creamos nuestro formulario, le asignamos un tipo de peticin HTTP y le escribimos una accin a realizar. No olvide que sino escribe estos parmetros el formulario har un retorno de formulario y utilizara a GET por default*/

<form method=post action=Datos.html> <input type=submit value=Agregar_Registro> </form></TD>


// Iniciamos nuestro script e incluimos el fichero Conexiones.php

<?php require_once("Conexiones.php"); mysql_connect($servidor,$usuario,$password);


/* Ejecucin y asignacin de la consulta SQL a la variable $result, recuerde que las variables que estamos utilizando se encuentran en el fichero Conexiones.php */

$result=mysql_db_query($basedatos,$consultaver); ?>
/*Ahora utilizando cdigo puramente HTML creamos un formato para mostrar los registros, para ello utilizaremos una tabla de HTML */

<table align=center border=1 cellspacing=4 cellpadding=4> <tr> <td><b><font color=RED size=3>Nombre:</td> <td><b><font color=RED size=3>Edad:</td> <td><b><font color=RED size=3>Direccion:</td> <td><b><font color=RED size=3>Correo:</td> </TR> Por: Domnguez Geniz A. Javier Geniz SWF && MSS 20

<?php
/* En otro script PHP mostraremos los registros con la funcin mysql_fetch_array que creara un arreglo con los valores que solicitamos en la consulta que se encuentra almacenada en la variable $result. Como se podr dar cuenta lo estamos haciendo de forma anloga a JAVA y de igual manera utilizando un bucle while para la iterar entre cada uno de los datos */

while($row=mysql_fetch_array($result)) {
/* Recuerda el flujo de salida out utilizado por los servlets? Si su respuesta es afirmativa, notara que imprimiremos los registros de igual manera en PHP pero claro utilizando una de sus funciones de impresin en pantalla, y por supuesto ser la funcin echo que de igual forma que nuestro flujo out (del tipo PrintWriter) imprime texto plano y etiquetas HTML .*/

echo '<tr> <td>'.$row["nombre"].'</td>'; echo '<td>'.$row["edad"].'</td>'; echo '<td>'.$row["direccion"].'</td>'; echo '<td>'.$row["correo"].'</td>'; '</tr>'; } mysql_free_result($result);
/* Para finalizar con PHP solo nos resta invocar a mysql_close que ser la responsable de cerrar la conexin */

mysql_close(); ?> </center></table><br></body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

21

Conexin de ASP.Net (C#) con SQL Server 2008

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

22

/* En cuanto a ASP.NET implementaremos Microsoft Visual C#.Net como lenguaje de programacin y ADO.Net para la conexin con SQL Server, Con diferencia a los lenguajes antes ya explicados ASP.Net no recoger los datos de algn fichero externo, sino que lo construir en el mismo de forma dinmica. Esta primera pagina al igual que JAVA y PHP es la pagina inicial y solo muestra informacin plana, lo cabe resaltar es la estructura, que ser explicada en c/u del resto de las paginas */

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Curriculum_ASP.Net._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Curriculum en ASP.Net</title> </head> <body background="fondoasp.jpg"> <center><h1>Bienvenido a mi Curriculum en ASP.Net</h1></center> Autor:Geniz<br /><hr /> Detalles:<br /> Lenguaje de Programacion: C# <br /> Base de Datos: SQL Server 2008<br /> Servidor: ASP.NET Development Server<br /> Puerto: 1509<br /> Path: http://localhost:1509/Default.aspx<br /> </br></br> <center><a href="Insertar.aspx">Continuar</a></center> <form id="form1" runat="server"> </form> </body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

23

/* Como fue mencionado anteriormente en este primer fichero llamado insertar.aspx ejecutara la consulta SQL al mismo tiempo que construir la forma dinmica que recoger los datos */

Insertar.aspx
/* Como podemos observar la pagina se encuentra dividida en dos partes importantes, la primera el bloque de declaracin de cdigo y la segunda que es el bloque proveedor de Cdigo */ /* Empezaremos por decirle a ASP.Net el lenguaje de programacin que vamos a utilizar por medio de la directiva <%@ Page language="C#" %> , en este caso C#, aunque tambin podramos haber utilizado Visual Basic.Net, VB Script ,J++ Script, etc. */

<%@ Page language="C#" %>


/* A continuacin importaremos espacios de Nombres los cuales contienen mtodos y objetos que implementaremos en la conexin y que son parte de ADO.Net */

<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>


/* Inicia el bloque de declaracin de cdigo, ntese que abrimos un script y que este a su vez contiene el atributo runat=server, esto indica a ASP.Net que se quiere llevar un control en el servidor y que a la hora de ser ejecutado lo mantendr vigilado por si se llegar a modificar o sufrir cambio alguno avisara lo que ocurre en el cliente, si no se lo pusiramos el objeto ser ejecutado solo como cdigo HTML estndar y esto a su vez funciona igual para todos los objetos que lo contienen. */

<script runat="server">
/* Iniciamos un mtodo y le pasamos como argumento las variables del sistema */

void Alta(Object sender, EventArgs args){


/* Crearemos un objeto del tipo SqlConnection que esta hecho especialmente para SQL Server y esto a su vez implica que no da soporte a ODBC debido a que es solo para el , aunque tambin podramos haber utilizado un OleDbConnection para otros SGBD, ahora se preguntarn OleDbConnection da soporte a SQL Server? , la respuesta es Si y siguiendo la misma estructura.*/ /* Al igual que en los otros lenguajes ADO.Net requiere de los mismos tres parmetros, solo que ahora despus de especificar el nombre del servidor SQL tendremos que especificar una instancia del mismo. En el ejemplo el servidor se llama GENIZ-1188AE9D3 y la instancia SQLSERVER2008 con // antes del nombre ya que si solo ponemos /, C# lanzara un error por ser un carcter no valido. */

SqlConnection conexion =new SqlConnection ("server=GENIZ1188AE9D3\\SQLSERVER2008;database=diplomado;uid=sa;pwd=************");


/* Pues bien, el siguiente paso consiste en crear una consulta DML para hacer la insercin de los datos y como en los lenguajes pasados, tambin ser almacenada en una cadena. La diferencia consiste en que ahora los datos son enviados en variables de la forma SQL, (precedidos por una arroba)*/

String sentencia="INSERT into usuarios (nombre,edad,direccion,correo) "+"VALUES(@nombre,@edad,@direccion,@correo)";

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

24

/* Definiremos a continuacin un objeto SqlCommand que ejecutara la consulta al igual que el Statement de JAVA, solo que este recibe primero la consulta y despus la conexin. */

SqlCommand comando=new SqlCommand (sentencia,conexion);


/* Definiremos una variable tipo entero que ser la encargada del total del numero de consultas ejecutadas por SQL Server */

int resultado;
/* Procederemos a abrir la conexin, como podr ver encerramos el cdigo en un bloque try al igual que en java con la finalidad de saber cuando se conect o por si hubo algn error */

try{ //Abrimos la conexion invocando al metodo open del objeto SqlConnection conexion.Open();
/* Ahora extraeremos los datos de cada objeto construido en la forma dinmica, en este caso de los objetos TextBox, mediante su propiedad Text y utilizaremos la propiedad add del mtodo Parameters del Objeto SqlCommand, de la manera siguiente: primero especificaremos el nombre de la variable SQL, este deber ser igual que lo coloco en la consulta y precedido por @, despus indicamos el tipo de datos SQL y la longitud */

comando.Parameters.Add(new SqlParameter("@nombre",SqlDbType.NVarChar, 10));


/* Enseguida a travs de la propiedad value de la variable asignaremos el contenido de nuestro objeto TextBox, el mismo procedimiento se sigue para los restantes parmetros */

comando.Parameters["@nombre"].Value = nombre.Text; comando.Parameters.Add(new SqlParameter("@edad",SqlDbType.NVarChar, 20)); comando.Parameters["@edad"].Value = edad.Text; comando.Parameters.Add(new SqlParameter("@direccion", SqlDbType.NVarChar, 20)); comando.Parameters["@direccion"].Value = direccion.Text; comando.Parameters.Add(new SqlParameter("@correo", SqlDbType.NVarChar, 20)); comando.Parameters["@correo"].Value = correo.Text;
/*Una vez enviada la consulta utilizando el mtodo ExecuteNonQuery de SqlCommand almacenaremos en la variable resultado el numero de consultas ejecutadas. */

resultado=comando.ExecuteNonQuery();
/* Despus utilizando el mtodo Write del objeto Response (hace lo mismo que el response de JAVA) mostraremos el valor devuelto por ExecuteNonQuery de SqlCommand y tambin un link a la siguiente pagina que mostrar los registros */

Response.Write("Se ha aadido "+resultado+" registro Usuarios</a>"); Response.Write("<br><br>");

"+"<a href=Mostra_Grid.aspx>Ver

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

25

/* Utilizando el metodo Close de SqlConnection cerramos la conexin */

conexion.Close(); }catch(SqlException e){ Response.Write("se ha producido una excepcin: "+e); }


/* fin del script (Bloque de declaracin de cdigo) */

</script>
/* Para la segunda parte de esta pagina (Bloque proveedor de cdigo) construiremos la forma dinmica de la pagina (Web Form) que es solo la arte grafica de los objetos HTML con la diferencia que ahora utilizaran propiedades y mtodos especiales de ASP.Net */

<html> <head><title>Insertar Nuevo Registro</title></head> <body>


/* Iniciamos el formulario que contiene a lo componentes, ntese que contiene el atributo runat=server y que no especificamos mtodo HTTP al que tiene que responder, ya que por default responder al mtodo GET. Recuerda el termino RETORNO DE FORMULARIO? Pues bien, esto se refiere a que el formulario regresara si mismo y ejecutara los scripts que contiene en el. Note que en la definicin de nuestro WebForm no incluimos esos atributos por lo que har un retorno. */

<form runat="server" id="formulario">


/* Construimos nuestro primer objeto incluyendo el atributo runat=server para crear un control en el servidor, despus en la propiedad ID especificamos su nombre y la propiedad text sirve para mostrar un texto, ponga atencin y fjese que antes de poner el nombre del tipo de objeto esta el prefijo asp: , este sirve para acceder a mtodos y propiedades especiales de .Net en caso de no ponerlo seria tratado como un objeto HTML. Nuevamente si es observador se har otra pregunta. Si en ASP.Net se puede poner el prefijo asp:, entonces se podr tambin en JAVA y PHP(que de forma anloga seria algo como jsp: php:)? La respuesta para el primer caso es afirmativa, por supuesto que JSP tambin tiene sus controles, en este caso no fueron mostrados ya que utilizamos Servlet y ese tipo de objetos son utilizamos frecuentemente solo en paginas JSP o en las JAVA SERVER FACES. Para el segundo caso la respuesta es no. PHP utiliza sus scriptles para el control de sus objetos. */

<asp:Label Runat="server" ID="textoNombre" text="Nombre"/> <asp:TextBox Runat="server" ID="nombre"/><br/> <asp:Label Runat="server" ID="textoEdad" text="Edad"/> <asp:TextBox Runat="server" ID="edad"/><br/> <asp:Label Runat="server" ID="Label1" text="direccion"/> <asp:TextBox Runat="server" ID="direccion"/><br/> <asp:Label Runat="server" ID="Label2" text="correo"/> <asp:TextBox Runat="server" ID="correo"/><br/>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

26

/* Por ultimo crearemos el botn que desencadenara al evento y ejecutara el mtodo Alta, para ello utilizaremos el evento OnClick del objeto button. No olvide poner runat=server*/

<asp:Button OnClick="Alta" Runat="server" ID="boton" Text="Aadir"/> </form></body></html>

/* En este ultimo archivo mostraremos los registros en una tabla, pero podramos utilizar una sentencia de repeticin (while) para acceder a los campos de la tabla?, nuevamente la respuesta es Si, pero por ahora utilizaremos un componente llamado DataGrid o rejilla de datos, hecho especialmente para mostrar la tabla completa y no registro por registro, es una de la funcionalidades y beneficios que trae .Net. Nota: La mayora de cdigo ya fue explicada anteriormente y solo me limitare a explicar funciones nuevas */

Mostrar_Grid.aspx
<%@ Page language="C#"%> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { SqlConnection conexion = new SqlConnection("server=GENIZ1188AE9D3\\SQLSERVER2008;database=diplomado;uid=sa;pwd=**************");
/* Declaramos un objeto SqlDataAdapter que ser el puente entre el almacn de los datos y el DataSet, nos va a permitir cargar el DataSet desde el origen de los datos y a actualizar los datos en el origen de datos con los del DataSet */

SqlDataAdapter adapter = new SqlDataAdapter( "select * from usuarios", conexion);


/* Definimos un objeto DataSet que pertenece a los objetos comunes de ADO .NET, es decir, es la misma clase para todo tipo de proveedores .NET, no se distingue entre SqlClient y OleDb es el almacn de datos en ADO .NET. Representa una base de datos desconectada del proveedor de datos. Almacena tablas y sus relaciones */

DataSet ds = new DataSet();

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

27

try{ conexion.Open(); adapter.Fill(ds, "usuarios");


/* Accedemos a las tablas almacenadas en el DataSet a travs de su propiedad tables, despus a su propiedad DefaultView que devuelve un objeto de la clase DataView, que ofrece una vista de los datos de la tabla para que podamos recorrer los datos, por ultimo los almacenamos en el DataGrid a travs de DataSource que indica la fuente de datos*/

tabla.DataSource = ds.Tables["usuarios"].DefaultView;
/* Databind ofrece mayor compatibilidad con todo los navegadores, Mediante este mecanismo podemos asociar unos datos con un control del interfaz de usuario correspondiente. Adems muestra la informacin de manera automtica en controles como el DataGrid */

tabla.DataBind(); conexion.Close(); } catch(SqlException ex){ Response.Write("se ha producido una excepcin: "+ex); }} </script> <html> <head><title>Usuarios</title></head> <body><center><br /><br />
/* Declaracion del objeto Datagrid, especificamos el nombre, los bordes y el encabezado. */

<asp:DataGrid id="tabla" runat="server" BorderWidth="1" GridLines="Both" HeaderStyle-Font-Bold="True" HeaderStyle-BackColor="red"> </asp:DataGrid></center> </body> </html>

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

28

Notas finales Como se pudo dar cuenta en el transcurso del desarrollo del presente manual solo me limite a hacer altas de nuevos registro y a establecer una conexin. Entonces si quisiramos hacer modificaciones o eliminar los registros. Qu debemos hacer? La respuesta es sencilla, recuerda que al inicio en la creacin de la BD incluimos un campo llamado id pues es hora de utilizarlo. Lo nico que tendr que realizar ser crear una interfaz que recoja los datos utilizando HTML, deber pedir el id y antes de enviarlo a la consulta tendr hacer una conversin a tipo entero solo para JAVA y C#, ya que los tipos de datos en PHP se realizan en la asignacin de las variables. La conversin se hace de la sig. Forma: JAVA int id= Integer.parseInt(request.getParameter("id")); C# int id=Int.Parse(campo id); y las consultas podran quedar as: String consBorrar=Delete * from usuarios where id=+id; String consAct=Update usuarios set nombre= +nombre+ where id=+id; No olvide que los tres lenguajes utilizados son sensibles a maysculas y minsculas, y que adems deben terminar con un fin de lnea ;. Tambin es importante mencionar que el proceso seguido por cada tipo de aplicacin para realizar la conexin y el alta se pueden hacer en los tres, es decir, podemos utilizar un formulario HTML para recoger los datos o crear la forma dinmica, conexin y la insercin en un solo fichero. Adems cabe recalcar que los gestores de bases de datos tambin pueden ser conectados con otro diferente lenguaje de programacin. Por ejemplo podemos conectar a SQL Server con JAVA mediante JDBC u ODBC, MySQL con ASP.Net mediante ODBC o MySQL Conector NET, y a PostgreSQL con PHP. Ya para finalizar aclarare que todo este trabajo se realizo con los IDEs previamente mencionados, pero es importante saber que de igual manera se puede realizar sin ellos, tan solo podramos haber utilizado una herramienta como el bloc de notas, necesitaramos un servidor apache para PHP, Tomcat o WebSphere para JAVA e Internet Information Service para ASP.NET, adems de .Net Framework y la Java Virtual Machine junto con la API Servlet 2.5.

Por: Domnguez Geniz A. Javier

Geniz SWF && MSS

29

También podría gustarte