Vous êtes sur la page 1sur 13

Como Crear, Modificar y Leer una Base de Datos.

Para el proyecto final, tenemos que saber como se crea una base de datos, como se crean tablas dentro de esta y como se van agregando, leyendo y borrando datos. Si desarrollamos en C# es muy fcil, debido a que .NET tiene una serie de clases que nos permiten manejar fcilmente una base de datos. Antes de empezar hay que tener instalada la aplicacin Microsoft SQL Server Express [MS SQL Express], esta viene junto con Visual Studio 2005. SQL? Ya que usaremos el servidor SQL de Microsoft nuestra base ser de este tipo: SQL. Para saber lo que e exactamente y conocer toda su funcionalidad poder ir a: http://es.wikipedia.org/SQL Por el momento solo nos interesa saber que SQL es un lenguaje especializado en el manejo de base de datos, es muy potente [puede definir y contener funciones], nosotros solo nos enfocaremos a los datos [informaron]. En http://www.freewebs.com/scmbgv2/EstructuraDeDatos/Informacion/SQL for Dummies 5th Edition.pdf pueden consultar aspectos mas especficos, aqu solo se explicaran los que necesitaremos, los bsicos.

Crear base de Datos.


SQL ejecuta comando, al igual que muchos lenguajes, por tanto tiene palabras reservadas [instrucciones], si queremos crear una base de datos necesitamos ejecutar la siguiente instruccin: CREATE DATABASE NombreBD Esta es una instruccin simple y crea una base de datos con propiedades por default. Se podra crear con propiedades especificas como PATH que es el directorio en que estar la base de datos, o propiedades como LOG_FILE con el cual definimos el nombre de del archivo que guardara un historial. Cuando ejecutamos CREATE DATABASE NombreBD simplemente la base de datos es creada en el servidor y directorio *PATH+ en el que estamos conectados. En el caso de MS SQL Express [MSSQL-E], se crea en la carpeta:

C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data Despus explicaremos mas especficamente el por que aqu, aunque tiene que ver con la conexin principal de MSSQL-E. Veamos un cdigo para crear una base de datos:
using System; using System.Data; using System.Data.SqlClient; namespace BaseDeDatos { public class BD { public void CrearBaseDeDatos() { SqlConnection miConexion = new SqlConnection( @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=master" ); string strComando = "CREATE DATABASE scmbg"; SqlCommand miComando = new SqlCommand(strComando, miConexion); try { miConexion.Open(); miComando.ExecuteNonQuery(); Console.WriteLine("Exito"); } catch (Exception Error) { Console.WriteLine(Error.Message); } finally { if (miConexion.State == ConnectionState.Open) { miConexion.Close(); } } } } public class ClaseMain { public static void Main() { BD basededatos = new BD(); basededatos.CrearBaseDeDatos(); } } }

Veamos el cdigo lnea a lnea Para empezar abrimos Visual Studio 2005 [VS2005], y creamos un proyecto vacio [Empty Project], despus agregamos referencias [ClickBotonDerecho sobre References y Add Reference]. Seleccionamos [de .NET] los archivos: System;

System.Data; Aqu la referencia importante es System.Data, ya que esta contiene las clases que nos permiten manejar una base de datos. Agregamos los nombres de espacio:
using System; using System.Data; using System.Data.SqlClient;

Creamos nuestro nombre de espacio, y una clase, en esta clase agregamos un mtodo para crear nuestra base de datos y declaramos algunas variables.
SqlConnection miConexion = new SqlConnection(@"Server=.\SQLEXPRESS;Integrated Security=yes;Database=master"); string strComando = "CREATE DATABASE scmbg"; SqlCommand miComando = new SqlCommand(strComando, miConexion);

Aqu esta lo interesante Primero creamos un objeto de la clase SqlConnection, el cual nos va a ayudar a crear una conexin con la base de datos, notaran que al constructor se le pasa una string, bueno pues este string es la instruccin que indica la forma que se realizara la conexin @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=master" La arroba al principio del string es una instruccin que indica que este string no tendr secuencias de escape, como son \n, \r, esto es para que al poner .\SQLEXPRESS no mande un error de que \S no es una secuencia de escape valida. Las otras instrucciones indican Server: el servidor al que nos conectaremos, en este caso SQLEXPRESS Integrated Security: Indica que se debe de habilitar una conexin segura que usa la validacin Windows, sea que si te puedes logear en Windows puedes acceder a la base de datos. Database: Indicamos la base de datos a la que nos queremos conectar; puesto que crearemos una base de datos nueva, nos conectamos a master la cual solo nos sirve para poder acceder al servidor y a una base datos y as poder ejecutar cdigo SQL. Continuemos con el cdigo Despue declramos un string con la instruccin que mencionamos antes, CREATE DATABASE scmbg, esto creara una nueva base de datos.

Seguido declaramos un objeto de la clase SqlCommand y al constructor le pasamos 2 datos, primero la instruccin que ejecutara[nuestro string] y despus la conexin [servidor y base de datos] en el que la ejecutara. Hasta que no se ha hecho nada con la base, solo se han deinido propiedades para cada objeto. Continuemos...
try { miConexion.Open(); miComando.ExecuteNonQuery(); Console.WriteLine("Exito"); }

catch (Exception Error) { Console.WriteLine(Error.Message); }

Lo que hacemos aqu es invocar a los mtodos que interactuaran con la base de datos, primero invocamos al mtodo Open() de nuestro objeto miConexion, este mtodo abre una conexin a la base de datos usando el parmetro que le pasamos al constructor a la hora de crearlo. Seguido invocamos al mtodo ExecuteNonQuery() del objeto miComando, este mtodo, ejecuta el string con nuestra instruccin que le pasamos al constructor, es Non Query por que lo nico que hacemos ejecutar cdigo no hacemos Query [Obtener]. Y al final mostramos xito si la base de datos se crea. Todo lo anterior va dentro de un try, cuando un programa falla .NET crea excepciones, las cuales se pueden manejar con try y catch *probar y atrapar], ya que el xito de la conexin a la base de datos y la ejecucin de la instruccin dependen no solo del cdigo si no de otros agentes externos, siempre ponemos esto dentro de un try. Se podra leer: prueba abrir la conexin, ejecutar el comando y muestra xito, si falla atrapa la excepcin y muestra el error.
finally { if (miConexion.State == ConnectionState.Open) { miConexion.Close(); } }

Con finally nos aseguramos que funcione o no el cdigo dentro de try siempre cerremos la conexin, ya que finally se ejecuta si se crea un excepcin [el cdigo falla] o no, pero primero verificamos si el estado de la conexin es Open *Abierto+, ya que si intentamos cerrar una conexin que nunca se abri generaramos otra excepcin [error], si esta abierta cerramos la conexin.

Close() es un mtodo del objeto miConexion del tipo SqlConnection. Se podra leer: prueba abrir la conexin, ejecutar el comando y muestra xito, si falla atrapa la excepcin y muestra el error, finalmente si la conexin esta abierta, cirrala.

public class ClaseMain { public static void Main() { BD basededatos = new BD(); Basededatos.CrearBaseDeDatos(); } }

Finalmente creamos una clase que contendr nuestro Main(), creamos un objeto de la clase que acabamos de crear e invocamos al mtodo . Corremos el programa con Control + F5 lo nico que veremos es xito. Si volvemos a corre el programa [Ctrl+F5] obtendremos una excepcin [error] que se genera cuando ejecutamos el comando CREATE DATABASE scmbg, try falla y catch atrapa el error, y muestra el mensaje, en este caso ser: the database already exist.

Como Agregar una Tabla


Bueno pues ya tenemos nuestra base de datos, pero no tiene informacin, lo que sigue es crear una tabla, en la cual meteremos nuestra informacin, esto es fcil, es muy parecido al mtodo anterior lo nico que cambia es el string con la intruccion [comando] a ejecutarse. Agregamos el siguiente mtodo a nuestra clase.
public void AgregarTabla() { SqlConnection miConexion = new SqlConnection( @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=scmbg"); string strComnado = "CREATE TABLE MiTabla (id INTEGER, Nombre CHARACTER (30));"; SqlCommand miComando = new SqlCommand(strComnado, miConexion); try { miConexion.Open(); miComando.ExecuteNonQuery(); Console.WriteLine("Exito"); } catch (Exception Error) { Console.WriteLine(Error.Message);

} finally {
if (miConexion.State == ConnectionState.Open) { miConexion.Close(); }

} }

Como puedes ver podras modificar el mtodo CrearBaseDeDatos() ponindole al string de la instruccin el valor aqu mostrado, no es recomendable, pero esto muestra que interactuar con la base de datos es muy fcil, creas un SqlCommand, SqlConnection, una instruccin, abres ejecutas y cierras.
CREATE TABLE MiTabla (id INTEGER, Nombre CHARACTER (30));

El metodo se comporta de la misma manera que anterior, lo unico que cambia, como lo habiamos dicho, es la instruccin [comando] a ejecutarce, esta ves le decimos que cree una tabla de nombre MiTabla y entre parentesis ponemos las columnas que tendra nuestra tabla, el nombre y el tipo de la variable. Id es de tipo INTEGER int o entero char[30] o arreglo de caracteres de [30] elementos

Nombre es de tipo CHARACTER (30)

Existen muchos tipos de datos, como son REAL, DOUBLE, CHARACTER , TEXT, etc. Al ejecutarse esta instruccin por medio del ExecuteNonQuery(), creamos una tabla con los valores datos; de esta forma podemos agregar las tablas que queramos. Para terminar ahora en nuestro mtodo Main() invocamos a la funcin AgregarTabla(), y quitamos el llamado a la funcin CrearBaseDeDatos(), ejecutamos [Ctrl+F5] y listo agregamos una tabla Si volvemos a ejecutar tendremos una excepcin [error] que nos dice que la base de datos ya tiene una tabla con el nombre dado, en este caso MiTabla.

Como agregar Informacin


Ya tenemos nuestra tabla, ahora podemos empezar a llenarla con informacin, Agregamos el siguiente mtodo a nuestra clase
public void AgregarInformacion() { SqlConnection miConexion = new SqlConnection( @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=scmbg"); string strComando = "INSERT INTO MiTabla (id, Nombre) VALUES (" +

"1, 'Elias');"; Console.WriteLine(strComando); SqlCommand miComando = new SqlCommand(strComando, miConexion); try { miConexion.Open(); miComando.ExecuteNonQuery(); Console.WriteLine("Datos Agregados"); } catch (Exception Error) { Console.WriteLine(Error.Message); } finally { if (miConexion.State == ConnectionState.Open) { miConexion.Close(); } } }

Si, como lo imaginabas y como lo puedes ver el mtodo es idntico a los 2 anteriores, lo nico que cambias es el string que contiene a nuestra instruccin [comando] que ejecutaremos.
INSERT INTO MiTabla (id, Nombre) VALUES (1, 'Elias');

Con esta instruccin le decimos que inserte[INSERT] dentro[INTO] de la tabla de nombre MiTabla y en las columnas que estn entre parntesis [id y Nombre] los valores [VALUES] que estn entre parntesis, un 1 como id y Elias como un arreglo de caracteres. Tambin puedes agregar valores que pasas a la funcin modificando los parmetros que recibe, en este caso 2, un entero y un string.
public void AgregarInformacion(int id, string nombre)

Y modificando el string del comando, al cual solo le agregamos los datos que recibimos
string strComando = "INSERT INTO MiTabla (id, Nombre) VALUES (" + id.ToString() + ", '" + nombre + "');";

Y el resto del mtodo es igual. Lo nico que falta es en Main() invocar esta funcin ya sea con paso de parmetros o no, puedes crear los 2 dejarlos como sobrecargas. Lo ejecutamos [Ctrl+F5] y listo la tabla ya tiene una entrada, si volvemos a ejecutarlo, la tabla tendr un elemento idntico al anterior, pero en otra fila. Tambin se puede agregar un par de instrucciones en el mtodo Main() para leer desde el teclado la informacin.

Yo puse un for que cuenta hasta tres y por cada iteracin, leo el id y el nombre del teclado e invoco al mtodo AgregarInformacion(int id, string nombre) y le paso los valores, adems agregue un Console.WriteLine(strComando) dentro del try del mtodo para ver el string del comando completo.

Como Eliminar Informacin


Agregamos el siguiente mtodo.
public void AgregarInformacion() { SqlConnection miConexion = new SqlConnection( @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=scmbg"); string strComando = "DELETE FROM MiTabla WHERE id = 3"; Console.WriteLine(strComando); SqlCommand miComando = new SqlCommand(strComando, miConexion); try { miConexion.Open(); miComando.ExecuteNonQuery(); Console.WriteLine("Datos Agregados"); } catch (Exception Error) { Console.WriteLine(Error.Message);

} finally { if (miConexion.State == ConnectionState.Open) { miConexion.Close(); } } }

Una vez mas lo unico que cambia es la instruccin que se ejecuta


DELETE FROM MiTabla WHERE id = 3

La instruccin dicta que borre [DELETE] de [FROM] nombre de la tabla, en este caso MiTabla donde [WHERE] el id es igual a 3. En este caso eliminara la fila que como id tiene un valor 3, que es tiene como nombre Lucio, otra vez, modificamos el mtodo Main() para invocar esta funcin. Tambin podemos modificar al funcin para que reciba un entero [int] con el id que queremos borrar y construir el string sumdnosle el numero.

Como Leer Informacin


Ya tenemos informacin dentro de nuestra tabla en la base de datos, es hora de obtenerla, agregamos el siguiente mtodo, y no esta vez no es igual.
public void ObtenerInformacion() { SqlConnection miConexion = new SqlConnection( @"Server=.\SQLEXPRESS;Integrated Security=yes;Database=scmbg"); string strComando = "SELECT * FROM MiTabla"; SqlCommand miComando = new SqlCommand(strComando, miConexion); SqlDataReader miLector = null; try { miConexion.Open(); miLector = miComando.ExecuteReader(CommandBehavior.SingleRow); miLector.Read(); Console.WriteLine("{0}|{1}", miLector[0], miLector[1]); } catch (Exception Error) { Console.WriteLine(Error.Message); } finally { if (miConexion.State == ConnectionState.Open) {

miConexion.Close(); } } }

Este mtodo es hasta cierto punto muy parecido, creamos una conexin con SqlConnection y un comando con SqlCommand y nuestro string con la instruccin a ejecutar Pero ahora debemos de crear un objeto del tipo SqlDataReader el cual ser el encargado de recibir la informacin de nuestra base de datos. Los cambios principales estn en try as que vemoslo lnea por lnea
miConexion.Open(); miLector = miComando.ExecuteReader(CommandBehavior.SingleRow); miLector.Read(); Console.WriteLine("{0}|{1}", miLector[0], miLector[1]);

Primero abrimos una conexin como en nuestros mtodos anteriores, y a continuacin al objeto del tipo SqlDataReader llamado miLector le asignamos el valor que regresa el mtodo ExcecuteReader(CommandBehaivor.SingleRow), ahora miLector contiene la informacin que se ley desde la base de datos, ahora debemos llamar a un mtodo dentro de este mismo objeto, llamado Read(), lo que hace bsicamente es que a la lista asociada con el [mismo], le asigna los valores ledos desde la base de datos y por tal motivo podemos acceder a ellos como si fue un arreglo, como se ve en Console.WriteLine. El parmetro que se pasa al mtodo ExecuteReader es una propiedad para solo obtener una fila de la tabla. Anteriormente invocbamos un mtodo llamado ExecuteNonQuery el cual lo nico que hacia era ejecutar la instruccin [comando] dentro de la base de datos y no obtena nada de la base de datos, en esta ocasin invocamos al mtodo ExecuteReader para leer informacin. Para el proyecto se puede crear un mtodo que como valor de retorno, regrese la variable de tipo SqlDataReader, y que cada seccin maneje los datos solicitados.

Funciono?
Hemos descrito las funciones bsicas de una base de datos en SQL, ahora veamos si funciono, as que vamos a agregar la base de datos a nuestro proyecto para poder verla grficamente. Vamos a Menu->View->Explorador de Servidores o presionamos Ctrl+W

Se desplegara el explorador de soluciones, agregamos una conexin dando click derecho sobre Conexiones de Datos.

Buscamos nuestra base de datos en la direccin: C:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data y la agregamos, si salen ventana extra, aceptamos o damos click en siguiente, y ahora ya tenemos un nodo con nuestra Base de datos, los desplegamos como muestra la imagen y en Tablas click con botn derecho y elegimos Mostrar datos de tabla.

Y listo hay esta la tabla, con el nombre las columnas y los datos que ingresamos, el 3 no aparece ya que fue el que borramos.

Vous aimerez peut-être aussi