cone xi ones web

29
Por: Domínguez Geniz A. Javier Geniz SWF && MSS 1 CONEXIONES WEB EN ASP.NET, PHP Y SERVLETS CON MICROSOFT SQL SERVER 2008, MYSQL 5.0 Y POSTGRESQL 8.2 Por: Domínguez Geniz Amalio Javier Geniz & Margen Software 2008. Todos los derechos reservados. Los logotipos y marcas utilizadas son marcas registradas de sus respectivas empresas.

Upload: ernesto-zapotitla

Post on 08-Apr-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 1/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 1

CONEXIONES WEB EN ASP.NET, PHP Y SERVLETSCON MICROSOFT SQL SERVER 2008, MYSQL 5.0 Y

POSTGRESQL 8.2

Por: Domínguez Geniz Amalio Javier

Geniz & Margen Software 2008.Todos los derechos reservados.

Los logotipos y marcas utilizadas son marcas registradas de sus respectivas empresas.

Page 2: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 2/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 2

Introducción

El presente trabajo pretende dar a conocer los métodos principales y mas utilizados dentro de lasaplicaciones web, en este caso se dará una pequeña pero muy practica introducción a la conexión delas bases de datos con lenguajes web y también la forma de manipular código SQL que nos permitirámanipular a la base de datos desde una aplicación web.

En primer lugar empezaremos con uno de los lenguajes que han tenido mucho auge en los últimosaños, que además es una tecnología de software libre y que utiliza como lo lenguaje de programacióna JAVA junto con todo su potencial, por supuesto nos referimos a los Servlets y paginas JSP. En esteprimer apartado aprenderá a conectar una base de datos de PostgreSQL 8.2 mediante JavaDataBase Connectivity.

Después de haber logrado el primer ejercicio veremos como de manera análoga se conecta una basede datos del reconocido y mas famosos gestor de Base de Datos de Código Abierto, denominadoMySQL. Utilizaremos un script de PHP y las instrucciones principales que utiliza este tipo delenguajes también Open Source.

Para finalizar realizaremos una conexión entre software propietario utilizando la plataformaMicrosoft.NET, en este ultimo apartado la conexión estará realizada por SQL Server y C#, medianteADO.Net y aprenderos porque ASP.Net ha sido una de las tecnologías mas importantes y utilizadasdesde hace ya tiempo atrás.

Nota: Estos códigos fueron compilados por IDE’s, para la aplicación de JAVA (Servlet y JSP) seutilizará Sun Java Studio Enterprise, para PHP utilizaremos NetBeans Early Access for PHP y paraASP.Net será Microsoft Visual Web Developer.

Page 3: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 3/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 3

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 cuestión de diseño,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 “AprendiendoSQL en N Diapositivas” .

Como podemos observar las tres bases de datos son casi iguales, la diferencia radica en el tipo dedato de la llave primaria que en todas ellas es un valor auto numérico, pero que se define de diferentemanera para cada una de ellas.

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 TOpostgres;

MySQL

create database diplomado;use diplomado;

create table usuarios(id int not null PRIMARY KEYauto_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));

Page 4: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 4/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 4

Conexión JSP y Servlets de JAVA conPostgreSQL 8.2

Page 5: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 5/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 5

/* Esta primera página llamada Index.jsp va a ser nuestra pagina inicial, ya que en toda aplicación websiempre iniciara con un índice(index), esta pagina al ser ejecutada solo mostrará texto plano y un link que nosvinculara a la siguiente página que realmente son las páginas que realizarán todo el trabajo. */

Index.jsp

/* Las siguientes líneas de código son solo Comentarios generados por el IDE */

<%--Document : indexCreated on : 04-oct-2008, 13:56:21Author : Geniz

--%>

/* Para iniciar, incluiremos directivas de página (<%@ %>)) que en este caso se encargarán de la codificaciónde 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 código restante es solo HTML estándar.*/

<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>

Page 6: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 6/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 6

/* Conexiones.java es el archivo pilar de nuestra primera aplicación, en el esta definida una clase de javallamada conexiones que contiene los métodos principales para la conexión y manipulación de la base de datos.

*/

Conexiones.java /*

* @author MSS*/

/* Importamos las bibliotecas de java a utilizar , import javax.swing nos servirá para el envío de mensajes ,import java.sql es una librería especial que contiene los objetos para realizar la conexión y por ultimoimportamos 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á elarchivo. */

public class Conexiones {

/* En las siguientes tres líneas de código definimos objetos, el primero es un objeto Connection el cual guardaranuestra ruta, nombre de usuario y contraseña de la base de datos, el objeto Statement será el encargado deejecutar las consultas mientras que ResultSet almacenará los datos que fueron solicitados por Statement . Noolvide importar la librería SQL ya que estos objetos están dentro de ella y de no importarla estos seránmarcados como errores. */

static Connection conexion;static Statement sentencia;static ResultSet resultado;

/* Iniciamos nuestro método llamado conecta, que será el encargado de establecer la conexión, controlados por un bloque try que nos avisara cuando la conexión se haya establecido o si algo ha fallado. */

Page 7: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 7/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 7

public static void conecta(){try

{ /* Cargamos el controlador jdbc de postgres a través de class.forName , el controlador deberá estar registradoen 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 conexión a través de la clase DriverManage r 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º parámetro es el nombre de usuario y por ultimo la contraseña del mismo.Todos ellos deberán ser datos de tipo cadena.*/

conexion=DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/diplomado", "postgres", "*********** " );

/* Una vez establecida la conexión invocaremos al método createStatement de Connection , el cual nosdevolverá un objeto Statement . */

sentencia=conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_ READ_ONLY );

/* En las siguientes líneas enviaremos mensajes para avisar que la conexión se estableció o en caso contrariomostraremos las posibles fallas, para ello el código se encuentra en un bloque try . */

JOptionPane.showMessageDialog (null, "Conexión establecida");} catch (Exception er){JOptionPane.showMessageDialog (null, "Error de

conexion" ); }}

/* Por ultimo construiremos un método denominado alta al que pasaremos como parámetro una cadena detexto, utilizará la conexión activa y un objeto Statement para ejecutar consultas del tipo DML . En caso deutilizar DDL o DCL utilizaremos el método executeUpdate de Statement . */

public static void alta(String cadena) {

// Verificamos que haya conexión activa, en caso contrario se realizara una nueva conexión.

if (conexion==null) { conecta(); }try{

// Ejecutamos la consulta recibidasentencia.execute(cadena);

} catch(Exception er){

Page 8: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 8/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 8

/* Atraparemos la excepción lanzada por java en caso de que no se haya ejecutado la consulta y se lamostraremos al usuario. */

JOptionPane.showMessageDialog(null, "Lo sentimos su operaciónsolicitada 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 unobjeto form que invocará al Servlet guardar a través de una petición POST de HTTP, aunque podríamostambién utilizar al método GET de HTT P , en caso de no especificar ninguna acción al botón 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. Además observaremos que todo el código es solo HTML lo cual nosindica que nuestra pagina también puede ser creada con HTML y tener esta extensión por ejemplo: Nuevo.html*/

Nuevo.jsp<%--

Document : NuevoCreated on : 04-oct-2008, 14:23:11Author : 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 acción y el método, en caso de no ponerlo se ejecutará un retorno de formulario como acción y el tipo de petición será GET. Note que para invocar a un Servlet solo se deberá poner el nombre del archivo sin ninguna extensión. También recuerde que debe escribirse tal y como esta nombrado distinguiendo mayúsculas y minúsculas, también 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>

Page 9: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 9/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 9

<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 código 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>"};

Page 10: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 10/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 10

/* Como podemos observar en el código fuente, el formulario se encuentra dentro de un arreglo de cadenas detexto y después por medio de un bucle y utilizando el método lenght que nos devolverá un tipo int con el tamañodel arreglo imprimiremos los controles por medio del método 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 laconsulta que será ejecutada por Statement . Nótese que un Servlet no contiene a una clase principal comoalguna aplicación JAVA ya que estos son invocados por peticione s 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 utilizarán la API de los Servlet para utilizar sus atributos y métodos, ademásde 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 método llamado processRequest , que recibe como argumentos a un objeto HttpServletRequest yotro HttpServletResponse , el primero se encargara de recoger y almacenar los datos que se encuentren en

Nuevo.jsp , mientras que respons e se encargara de devolver una respuesta a la petición, en este caso devolveráuna página HTML, este tipo de métodos tendrá que estar protegido forzosamente contra posibles excepcionesmediante 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 ycontenido HTML con el juego de caracteres UTF-8 que se refiere al juego UNICODE ligeramente modificado ,aunque también 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 (página HTML), para elloutilizaremos el método getWriter del objeto response y se lo asignaremos a nuestro flujo de salida out que es dela clase PrintWriter. */

Page 11: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 11/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 11

PrintWriter out = response.getWriter();

/* Ahora almacenaremos el contenido de los input text en cadenas mediante el objeto request e invocando a sumetodo getParameter , el cual recibe como argumento el nombre de nuestros cuadros de textos de HTML, debidoa que en la BD los datos son de tipo cadena no es necesaria conversión alguna, pero si por ejemploalmacenáramos un ID que son números tendríamos que invocar al método parseInt de la clase Integer , por ejemplo: int id = Integer.parseInt(request.getParameter("id")); y con esta línea de código obtendríamos

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 método Alta de nuestraclase Conexiones que contiene un objeto Statement que será el encargado de ejecutarla, podemos ver que lasvariables 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 inserción de números solo restaría omitir las comillas simples. Además también especificamos loscampos en los que vamos a realizar la inserción de datos, como pudo notar cuando definimos la tabla algunoscampos están en diferente orden y además tenemos un campo llamado id que es auto numérico y es por ello queno necesitaremos insertar algún dato en el, así que en esta consulta definimos el orden de los campos y de sumanipulación.*/

String consulta = "INSERT INTO usuarios (nombre, edad, direccion, correo) VALUES('"+nombre+"','"+edad+"','"+direccion+"','"+correo+"')";

//Enviamos la consulta al método 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 través de close , encerrado en un bloque finally para indicar que pase lo que pase estetendrá que ser cerrado*/

} finally {out.close();

}}

Page 12: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 12/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 12

/* Finalmente invocamos al metodo processRequest a traves de una peticion POST de HTTP , esto lo haremosmediante doPost , de forma análoga podríamos invocar al método GET con doGet y de igual manera podríamosinvocar a cualquier tipo de petición HTTP como doTrace , doPut , etc. También es posible invocar a variosmétodos en el mismo código y ya será el Servlet el encargado de elegir la mejor opción. Recuerde pasar los

parámetros response y request .*/

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {processRequest(request, response);}

}

/* En este ultimo archivo, la mayoría de las instrucciones ya fueron explicadas anteriormente solo fijaremosnuestra atención en las instrucciones nuevas. Listar.java será el responsable de mostrar lo datos de la tablamediante el objeto ResulSet */

Page 13: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 13/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 13

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, después se la enviamos al objeto llamado sentencia de la claseConexiones para que la ejecute a través del método executeQuery, que funciona igual que su método execute , ylos resultados recibidos los almacenaremos en el ResulSet */

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

Page 14: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 14/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 14

/* Después utilizando al método next de ResulSet , procederemos a extraer los datos mediante el atributo getStrin g de este objeto, el cual devuelve una cadena, podemos especificar el nombre del campo como en elejemplo o también podríamos especificar el índice por ejemplo: rs.getString(0) ; o en un caso mas especificoutilizar getInt, getBoolean, getDate, preste especial atención si utiliza alguno de estos métodos ya que debetener 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);}

}

Page 15: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 15/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 15

Conexión PHP con MySQL 5.0

Page 16: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 16/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 16

/* 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 código 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">

<?phpecho("<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>

Page 17: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 17/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 17

/* Conexiones.php es un archivo que solo contiene una lista de variables inicializadas, las cuales contienen las principales referencias a utilizar para la conexión 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 también podría ocupar un archivo HTML con lo que podremos decir que esta pagina también nos serviría 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>

Page 18: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 18/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 18

/* 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 través de request en variables, 3.Realizará la conexión 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 través de <?php y ?>

<?php

/* Solicitamos los campos pedidos en Datos.html, además incluiremos el archivo conexiones.php que contiene las variables con los datos para la conexión, lo incluiremos a través de la función require_once , aunque también pudimos usar include . No olvide que PHP distingue caracteres así que recuerde poner bien mayúsculas y minúsculas, además de que cada línea debe terminar con ; */

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

$edad=$_REQUEST["edad"];$direccion=$_REQUEST["direccion"];$correo=$_REQUEST["correo"];

/* A través de la función 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 además contiene al servidor apache . */

Page 19: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 19/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 19

mysql_connect($servidor,$usuario,$password);

/* Una ves establecida la conexión procederemos a ejecutar la consulta invocando a la función mysql_db_query que recibe como parámetros el nombre de la base de datos y después la consulta */

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

$debug=true; /* La siguiente condición servirá de manera análoga a un bloque try. Se encargará de hacernos saber si algo fallo en el proceso de conexión o de ejecutar la consulta invocando a la función 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 laBD</font></b></h2></div><br><br>

/* Una vez pasado el proceso anterior mostraremos dos links al usuario para que puedad ver la información 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>

Page 20: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 20/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 20

/* Para concluir con PHP y MySQL crearemos una pagina que se encargar de hacer una consulta a la base dedatos con la finalidad de mostrar los registros que hay en la tabla. Por supuesto que de eso se encargaraleer.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 petición HTTP y le escribimos una acción a realizar. Noolvide que sino escribe estos parámetros 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

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

/* Ejecución y asignación 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 código 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>

Page 21: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 21/29

Page 22: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 22/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 22

Conexión de ASP.Net (C#) con SQLServer 2008

Page 23: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 23/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 23

/* En cuanto a ASP.NET implementaremos Microsoft Visual C#.Net como lenguaje de programación y ADO.Net para la conexión con SQL Server, Con diferencia a los lenguajes antes ya explicados ASP.Net no recogerá los datos de algún fichero externo, sino que lo construirá en el mismo de forma dinámica. Esta primera pagina al igual que JAVA y PHP es la pagina inicial y solo muestra información 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>

Page 24: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 24/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 24

/* Como fue mencionado anteriormente en este primer fichero llamado insertar.aspx ejecutara la consulta SQLal mismo tiempo que construirá la forma dinámica que recogerá los datos */

Insertar.aspx

/* Como podemos observar la pagina se encuentra dividida en dos partes importantes, la primera el bloque de declaración de código y la segunda que es el bloque proveedor de Código */

/* Empezaremos por decirle a ASP.Net el lenguaje de programación que vamos a utilizar por medio de la directiva <%@ Page language="C#" %> , en este caso C#, aunque también podríamos haber utilizado Visual Basic.Net, VB Script ,J++ Script , etc. */

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

/* A continuación importaremos espacios de Nombres los cuales contienen métodos y objetos que implementaremos en la conexión y que son parte de ADO.Net */

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

/* Inicia el bloque de declaración de código, nótese 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 pusiéramos el objeto será ejecutado solo como código HTML estándar y esto a su vez funciona igual para todos los objetos que lo contienen. */ <script runat="server">

/* Iniciamos un método 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 también podríamos haber utilizado un OleDbConnection para otros SGBD, ahora se preguntarán ¿ 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 parámetros, solo que ahora después 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 carácter no valido. */

SqlConnection conexion =new SqlConnection ("server=GENIZ-1188AE9D3\\SQLSERVER2008;database=diplomado;uid=sa;pwd=************");

/* Pues bien, el siguiente paso consiste en crear una consulta DML para hacer la inserción de los datos y como en los lenguajes pasados, también 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)";

Page 25: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 25/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 25

/* Definiremos a continuación un objeto SqlCommand que ejecutara la consulta al igual que el Statement de JAVA, solo que este recibe primero la consulta y después la conexión. */

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 conexión, como podrá ver encerramos el código en un bloque try al igual que en java con la finalidad de saber cuando se conectó o por si hubo algún 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 dinámica, en este caso de los objetos

TextBox, mediante su propiedad Text y utilizaremos la propiedad add del método 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 @, después indicamos el tipo de datos SQL y la longitud */

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

/* Enseguida a través de la propiedad value de la variable asignaremos el contenido de nuestro objeto TextBox , el mismo procedimiento se sigue para los restantes parámetros */

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 método ExecuteNonQuery de SqlCommand almacenaremos en la variable resultado el numero de consultas ejecutadas. */

resultado=comando.ExecuteNonQuery();

/* Después utilizando el método Write del objeto Response (hace lo mismo que el response de JAVA )mostraremos el valor devuelto por ExecuteNonQuery de SqlCommand y también un link a la siguiente pagina que mostrará los registros */

Response.Write("Se ha añadido "+resultado+" registro "+"<a href=Mostra_Grid.aspx>VerUsuarios</a>");Response.Write("<br><br>");

Page 26: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 26/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 26

/* Utilizando el metodo Close de SqlConnection cerramos la conexión */ conexion.Close();

}catch(SqlException e){

Response.Write("se ha producido una excepción: "+e);

} /* fin del script (Bloque de declaración de código) */ </script>

/* Para la segunda parte de esta pagina (Bloque proveedor de código ) construiremos la forma dinámica de la pagina ( Web Form ) que es solo la arte grafica de los objetos HTML con la diferencia que ahora utilizaran propiedades y métodos especiales de ASP.Net */

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

/* Iniciamos el formulario que contiene a lo componentes, nótese que contiene el atributo runat=server y que no especificamos método HTTP al que tiene que responder, ya que por default responderá al método 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 definición 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,después en la propiedad ID especificamos su nombre y la propiedad text sirve para mostrar un texto, ponga atención y fíjese que antes de poner el nombre del tipo de objeto esta el prefijo asp: , este sirve para acceder a métodos 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á también en JAVA y PHP(que de forma análoga seria algo como jsp: ó php:)? La respuesta para el primer caso es afirmativa, por supuesto que JSP también 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/>

Page 27: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 27/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 27

/* Por ultimo crearemos el botón que desencadenara al evento y ejecutara el método Alta, para ello utilizaremos el evento OnClic k del objeto button. No olvide poner runat=server */

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

/* En este ultimo archivo mostraremos los registros en una tabla, pero ¿podríamos utilizar una sentencia de repetición (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 mayoría de código 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=GENIZ-1188AE9D3\\SQLSERVER2008;database=diplomado;uid=sa;pwd=**************");

/* Declaramos un objeto SqlDataAdapter que será el puente entre el almacén 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 almacén de datos en ADO .NET. Representa una base de datos desconectada del proveedor de datos. Almacena tablas y sus relaciones */

DataSet ds = new DataSet();

Page 28: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 28/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 28

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

/* Accedemos a las tablas almacenadas en el DataSet a través de su propiedad tables , después 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 través 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. Además muestra la información de manera automática en controles como el DataGrid */

tabla.DataBind();conexion.Close();}catch(SqlException ex){Response.Write("se ha producido una excepción: "+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>

Page 29: Cone Xi Ones Web

8/6/2019 Cone Xi Ones Web

http://slidepdf.com/reader/full/cone-xi-ones-web 29/29

Por: Domínguez Geniz A. Javier Geniz SWF && MSS 29

Notas finales

Como se pudo dar cuenta en el transcurso del desarrollo del presente manual solo me limitea hacer altas de nuevos registro y a establecer una conexión. Entonces si quisiéramos hacermodificaciones o eliminar los registros. ¿Qué debemos hacer? La respuesta es sencilla,recuerda que al inicio en la creación 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 datosutilizando HTML, deberá pedir el “id” y antes de enviarlo a la consulta tendrá h acer unaconversión a tipo entero solo para JAVA y C#, ya que los tipos de datos en PHP se realizanen la asignación de las variables. La conversión se hace de la sig. Forma:

JAVA

int id= Integer.parseInt(request.getParameter("id"));

C#

int id=Int.Parse(“campo id”);

y las consultas podrían 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 mayúsculas y minúsculas, y queademás deben terminar con un fin de línea “;”.

También es importante mencionar que el proceso seguido por cada tipo de aplicación pararealizar la conexión y el alta se pueden hacer en los tres, es decir, podemos utilizar unformulario HTML para recoger los datos o crear la forma dinámica, conexión y la inserción enun solo fichero. Además cabe recalcar que los gestores de bases de datos también puedenser conectados con otro diferente lenguaje de programación. Por ejemplo podemos conectara SQL Server con JAVA mediante JDBC u ODBC, MySQL con ASP.Net mediante ODBC oMySQL Conector NET, y a PostgreSQL con PHP.

Ya para finalizar aclarare que todo este trabajo se realizo con los IDE’s previamentemencionados, pero es importante saber que de igual manera se puede realizar sin ellos, tansolo podríamos haber utilizado una herramienta como el bloc de notas, necesitaríamos unservidor apache para PHP, Tomcat o WebSphere para JAVA e Internet Information Servicepara ASP.NET, además de .Net Framework y la Java Virtual Machine junto con la API Servlet2.5.