viernes, 3 de junio de 2011

MySQL: CREAR, MODIFICAR, ELIMINAR Y SELECCIONAR UNA BD

CREAR UNA BD
Usando CREATE DATABASE creamos una base de datos (BD) vacía, seguido escribimos el nombre de la BD a crear, el cual no debe exceder de 64 caracteres y no debe coincidir con algún nombre o palabra reservada. Cuando creas una BD, el MySQL server crea un directorio bajo su directorio de datos (data directory), las BD son almacenadas en esa locación común. El nuevo subdirectorio es llamado directorio de la base de datos (database directory), el cual tiene el mismo nombre de la BD , que representa cada BD dentro del data directory. El data directory por lo tanto es el padre de todos los database directories. MySQL usa el database directory para administrar los componentes de la BD como por ejm. sus tablas. Un database directory puede contener archivos para otros objetos de base de datos como por ejm. triggers. El servidor también crea un archivo 'db.opt' en el database directory para almacenar los atributos de la BD.
CREATE DATABASE bdEjemplo;
Otra palabra para BD en MySQL es SCHEMA que puede ser usado en lugar de DATABASE
CREATE SCHEMA bdEjemplo;
En Windows el nombre de las BD son convertidas a minusculas, por que los nombres de los archivos y directorios del windows son case insensitive, pero en Linux y otros similares son case sensitive. Si el nombre contiene caracteres especiales, números o espacios, debe estar dentro de 2 operadores backtick( ` )
CREATE DATABASE `bdespañol`;
CREATE DATABASE `bd con espacios`;
CREATE DATABASE `666`;
Antes de crear la BD debemos de asegurarnos de tener los suficientes privilegios para llevar a cabo esa acción y también que no exista una BD con el mismo nombre. Para lo último podemos usar el siguiente script 
CREATE DATABASE IF NOT EXIST bdEjemplo;
Con la palabra reservada IF NOT EXIST nos aseguramos de crear la BD solo si no existe anteriormente, si la BD existe entonces el comamdo nos retorna un error y no habrá cambios en el servidor. También a la BD podemos asignarle el tipo de codificación/juego de caracteres(charset) que deseas usar (ejm. UTF-8, latin1,etc) usando la palabra reservada CHARACTER SET. Un character set o charset es el conjunto de carcteres disponibles que pueden ser usados(similar a un alfabeto), diferentes lenguas tienen diferentes alfabetos y amenudo diferentes caracteres. Para obtener la lista de charsets soportados podemos usar la siguiente sentencia en la consola
SHOW CHARACTER SET;
Seguido podemos asignarle también el collation (conjunto de reglas usadas por MySQL para comparar los caracteres) usando la palabra reservada COLLATE (ejm. utf8_icelandic_ci). Un collation especifica la clasificación del orden léxico(a,b,c, etc.) Para ver la lista de collations usamos el siguiente script
SHOW COLLATION;
El script resultante del uso de ambos(character ser y collate) sería como este
CREATE DATABASE bdEjemplo CHARACTER SET utf8 COLLATE utf8_icelandic_ci;
En caso de no especificar el charset y el collartion, se tomaran los valores por defecto del MySQL (Latin-1). Si solo utilizas CHARACTER SET, se usa el collation que esta por defecto. Si solo se usa COLLATE, la primera parte del nombre del collation determina el charset (utf8_icelandic_ci -> utf8). 
Cada database directory tiene un character set y collation por defecto, el cual se especifican al crear la BD. Estas propiedades son almacenadas en el archivo 'bd.opt'.
OBTENER METADATA DE LA BD
La BD 'information_schema' tiene una tabla 'schemata' que contiene la metadata de las BD (información sobre las BD). Para mostrar información acerca de nuestra BD usamos la siguiente declaración
SELECT * FROM information_schema.schemata WHERE schema_name = 'bdEjemplo';
Para ver la configuración de tu BD puedes usar SHOW CREATE DATABASE seguido del nombre de la BD
SHOW CREATE DATABASE bdEjemplo;
Al final de todo puedes verificar la existencia de tu BD recién creada y de otras mas,  puedes usar el siguiente script:  SHOW DATABASES  y seguido, opcionalmente el modificador LIKE (seguido del nombre o parte del nombre seguido de un %) si no sabes exactamente el nombre de la BD y si quieres ser mas preciso en tu búsqueda.
SHOW DATABASES LIKE 'bdEj%';
MODIFICAR UNA BD
Si deseamos modificar los características globales de la BD (solo charset y collation), usamos la palabra reservada ALTER y al final los nuevos valores de CHARACTER SET y COLLATE. Al menos uno de ellos debe ser modificado. Si se omite el nombre de la BD, los cambios se aplican a la BD que esté por defecto. Esta modificaciones no se aplican a renombrar la BD, para ello se deberá crear una nueva y eliminar la anterior.
ALTER DATABASE bdEjemplo CHARACTER SET utf8 COLLATE utf8_icelandic_ci;
ALTER DATABASE bdEjemplo COLLATE utf8_icelandic_ci;
ALTER DATABASE bdEjemplo CHARACTER SET utf8;
/*los cambios se aplican a la BD que está por defecto*/
ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_icelandic_ci; 
ELIMINAR UNA BD
Si deseas eliminar una BD creada previamente, debes usar la palabra reservada DROP DATABASE seguido por el nombre de la BD. Con eso se eliminara definitivamente(con tablas triggers, etc) y no habrá opción a recuperar o deshacer la acción
DROP DATABASE bdEjemplo;
Para asegurarnos de eliminar la BD solo si existe usamos IF EXISTS 
DROP DATABASE IF EXISTS bdEjemplo;
SELECCIONAR UNA BD
Para seleccionar una BD antes de algún script usamos USE seguido por el nombre de la BD. Puedes usarlo las veces que quieras para cambiar de BD y no limita el uso de tablas de otras BD
USE bdEjemplo;

lunes, 10 de enero de 2011

ADO.NET con Visual Basic 2010 parte 1

ADO.NET se caracteriza por su arquitectura desconectada, lo que significa que las aplicaciones se conectan a la base de datos para buscar y recuperar una carga de datos y almacenarlo en memoria. Luego estas aplicaciones podrán manipular la información almacenada en la memoria . El principal almacén de datos es el DataSet, el cual con tiene a su vez otros almacenes de datos en memoria como los objetos DataTable, DataColum y DataRow.
El núcleo de las clases de ADO.NET están en el namespace System.Data, el cual contiene otros namespaces como System.Data.SqlClient y System.Data.OleDb. En este caso solo usaremos System.Data.SqlClient para conectarnos al SQL Server. 
para poder conectarse al SQL Server tenemos que importarlo al proyecto asi:
Imports System.Data.SqlClient
'al inicio de todo
Public Class Form1

End Class
A continuacion veremos las clases de ADO.NET del namespace System.Data.SqlClient.
Clase SqlConnection
Provee la conexión con la BD en este caso al SQL Server. Aquí puedes especificar la cadena de Conexión, el cual tiene lo necesario para abrir una conexión a la BD. El SqlConnection tiene los siguientes parámetros básicos para la conexión:
  • Server: el nombre del SqlServer al que se quiere accerder. Usualmente el nombre de la computadora donde se esta ejecutando el SQL Server. Si el SQL Server esta en la misma maquina donde trabajas se puede usar solo (local) o localhost.
  • Database: el nombre de la BD a la cual se quiere conectar.
  • User ID: el nombre de usuario para acceder a la BD
  • Password: la contraseña para del usuario(User ID)
también se pude usar la seguridad integrada (se llama así por que el SQL Server esta integrado con el sistema de seguridad de Windows NT, dando la mejor coneccion segura, ya que los parametros User Id y Password no necesitan ser especificados en el codigo), con la cual no será necesario especificar un usuario y un password a la cadena de conexión. Solo se tiene que hacer mención en la cadena usando el parametro Integrated Security, el cual se le da el valor true
En el proyecto el código iría así
'
Dim objConnection As SqlConnection = New SqlConnection("server=(local); database=pruebaBD; Integrated Security=true")
'


Este caso usaremos Integrated Security. La otra opción sería asi:
'
Dim objConnection As SqlConnection = New SqlConnection("server=(local); database=pruebaBD; User ID=sa; Password=tuclave")
'
Ahora que se tiene una conexión,  se puede abrirla o cerrarla de esta forma:
'Se usan los métodos del objeto SqlConnection: Open para abrir
objConnection.Open()

'y Close para cerrar
objConnection.Close()
Clase SqlCommand
representa un comando SQL que se ejecuta en el alancen de datos. Los comando suelen ser un select, insert, update o delete query , el cual puede ser un SQL String o llamar a un stored procedure. La forma más facil es inicializar un objeto SqlCommand sin parametros y después de inicializado se establecen las propiedades. Se inicializa un objeto SqlCommand de la siguiente manera.
'
Dim objCommand As SqlCommand = New SqlCommand()
'
ahora se tendrá que configurarse ciertas propiedades en el objeto SqlCommand:
  • Connection: aquí se asigna un objeto SqlConnection para establecer la conección con la BD. Para que funcione, la conexión tiene que ser abierta en tiempo de ejecución.
'
objCommand.Connection = objConnection
'
  • CommandText: aquí se espedifica el SQL string o el stored procedure a ser ejecurado entre comillas dobles.
'
objCommand.CommandText = "INSERT INTO persona (pe_codigo,pe_nombre,pe_edad) VALUES (1,'MarioBros',50)"
'
en este ejemplo, al CommandText le asignamos un SQL query básico, en el cual solo se hace un INSERT para agregar datos a la tabla persona, el cual tienen las columnas pe_codigo, pe_nombre, pe_edad y luego le agregamos los valores (1, "MarioBros", 50) para cada columna respectivamente.


ya que generalmente los valores que se asignan son desconocidos, es mejor usar placeholders, que son variables que llevan un arroba adelante (@). No necesitan llamarse necesariamente como las columnas de la tabla, pero ayuda a tener un código mas claro. En este caso el código sería así:
'
objCommand.CommandText = "INSERT INTO persona (pe_codigo,pe_nombre,pe_edad) VALUES (@pe_codigo,@pe_nombre,@pe_edad)"
'
luego se tiene que crear los parámetros necesarios para insertar los valores a los placeholders cuando la sentencia SQL sea ejecutada. Se le crea y agrega parametros a la colección parameters del objeto SqlCommand. Los parámetros se refieren a los parámetros que se necesitan para enviar datos al SQL query o al stored procedure.  La forma más facil de agregar parametros es la suguiente:
'
objCommand.Parameters.AddWithValue("@pe_codigo", txtCodigo.Text)
objCommand.Parameters.AddWithValue("@pe_nombre", txtNombre.Text)
objCommand.Parameters.AddWithValue("@pe_edad", txtEdad.Text)
'
Con el método AddWithValue se indica el nombre de la variable y el valor que se le asignará. En este caso los valores se obtienen de un TextBox. También se puede usar el método Add, aunque ya está obsoleto, pero ayuda a declarar con mejor exactitud los tipos de las variables, ya que con AddWithValue los hace automáticamente y a veces puede que cree algunos errores al tratar de convertir tipos.
  • El Método ExecuteNonQuery: Con este método se ejecuta el SQL query. Para hacerlo se debe primero abrir la conección a la BD. Este método retorna el número de filas que fueron afectadas por el query. En codigo sería así:
'
objCommand.Connection.Open()
objCommand.ExecuteNonQuery()
objCommand.Connection.Close()
'


PRACTICA
Ahora ya tenemos lo suficiente para agregar datos, en este caso usando el SQL Server 2008.
Abrimos el Visual studio 2010, creamos un nuevo proyecto y elegimos crear una aplicación de Windows Forms. Le ponemos de nombre "Prueba_ADO". Usaremos el nombre por defecto del Form que es "Form1.vb". Agregamos los controles que se ven en la imagen:
para los Textboxs le agregaremos los sigtes. nombres correspondientemente: txtCodigo, txtNombre, txtEdad. Para los botones los sigtes. nombres btnAgregar, btnLimpiar, btnSalir


para la parte del SQL Server, creamos una nueva BD llamada "pruebaBD" y luego ejecutamos el siguiente script para crear la tabla persona
USE [pruebaBD]
GO
CREATE TABLE persona(
 pe_codigo int Primary Key NOT NULL,
 pe_nombre nvarchar(10) NULL,
 pe_edad int NULL,
) 
GO
ahora le damos doble click a los 3 botones y los llenamos con los códigos que están aquí
'no te olvides de importar
Imports System.Data.SqlClient

Public Class Form1

     'creamos una coneccion a la BD 
      Dim objConnection As SqlConnection = New SqlConnection("server=(local); database=pruebaBD; Integrated Security=true")

    Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
        Try

            'creamos un objeto SqlCommand para enviar una consulta SQL a la BD
            Dim objCommand As SqlCommand = New SqlCommand()

            'le asignamos la coneccion al objeto SqlCommand
            objCommand.Connection = objConnection

            'le asignamos al obj SqlCommand el Query o el stored procedure / con @ se crea una variable
            objCommand.CommandText = "INSERT INTO persona (pe_codigo,pe_nombre,pe_edad) VALUES (@pe_codigo,@pe_nombre,@pe_edad)"

            'con la propiedad Parameters del objeto SqlCommand asignamos los valores a los parametros pre establecidos
            objCommand.Parameters.AddWithValue("@pe_codigo", txtCodigo.Text)
            objCommand.Parameters.AddWithValue("@pe_nombre", txtNombre.Text)
            objCommand.Parameters.AddWithValue("@pe_edad", txtEdad.Text)

            'antes de ejecutar el Query necesitamos abrir la coneccion
            objCommand.Connection.Open()
            'ahora que esta abierta la coneccion podemos ejecutar el query
            objCommand.ExecuteNonQuery()
            'y finalmente cerramos la coneccion
            objCommand.Connection.Close()
        Catch ex As Exception
            MsgBox(ex.Message.ToString, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error")
        End Try
    End Sub

    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        'para limpiar el contenido del los Textboxs
        txtCodigo.Clear()
        txtEdad.Clear()
        txtNombre.Clear()
    End Sub

    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        'cerrar aplicacion
        Close()
    End Sub
End Class
Dentro del botón agregar se le ha puesto un try-catch para manejar las excepciones. Ahora, después de verificar que no hay ningún error de sintaxis ejecutamos la aplicación y podremos ingresar los 3 datos de código, nombre y edad. Recuerda que no hay validación en los Textbox así que mira donde van solo números y solo texto. Para Comprobar que se ha ingresado  los datos puedes ir al SQL Server y verificar si allí están.

Presentacion

Este es un blog creado por principiantes para principiantes (con cierto conocimiento previo). Se iniciarán algunos temas básicos los cuales se irán extendiendo en profundidad poco a poco. Si tienes conocimiento de algún tema también puedes aportar aquí. Correcciones y sugerencias serán bienvenidas para mejorar el blog.