Manejo de una Base de Datos Microsoft SQL Server a través de Visual C #, vía instrucciones SQL. M.C. Enrique Ruiz Díaz. Estoy titulado en la Maestría en Ciencias de la Computación, Misma que estudié en el Instituto Tecnológico de Orizaba, Ver, México. Generación 2005-2007. Visite: http://www.scribd.com/enriqueruizdiaz 15-Febrero-2010 1
INTRODUCCIÓN. No es objetivo de este breve manual enseñar a programar ni explicar lo que son las bases de datos. Por tanto, doy por hecho que ya se poseen esos conocimientos esenciales y presento una muy breve introducción a las herramientas que se usarán en este breve tutorial que son: 1) Microsoft SQL Server 2005 Express. 2) Microsoft SQL Server Management Studio Express. 3) Microsoft Visual C# Express 2008 A continuación, me enfoco en la aportación importante de este tutorial que es el código que permite manipular una base de datos SQL Server, desde un programa de C #, vía instrucciones SQL. 15-Febrero-2010 2
Herramientas que se requieren. 4) Microsoft SQL Server 2005 Express. 5) Microsoft SQL Server Management Studio Express. 6) Microsoft Visual C# Express 2008 Microsoft SQL Server 2005 Express. SQL Server es un sistema para administración de bases de datos que posee una arquitectura cliente / servidor. Utiliza el lenguaje de consulta Transact-SQL para recibir comandos desde los clientes que se conectan a él, y ofrece una gran variedad de herramientas y servicios para desarrollar y administrar bases de datos de distintos tamaños y complejidades. La versión SQL Server 2005 Express Edition es gratuita y de distribución libre, liviana e ideal para utilizarla en soluciones departamentales, prototipos y aplicaciones Web de baja complejidad. El tamaño máximo que puede llegar a tener una base de datos es de 4 GB. Microsoft SQL Server Management Studio Express. Si bien el servidor SQL Server se puede administrar desde distintas herramientas que vienen incluidas en el mismo producto. No obstante, existe una herramienta útil para tal efecto, que es Microsoft SQL Server Management Studio Express. Esta es una herramienta visual, lo que permite administrar los servidores SQL de manera rápida y sencilla. Esta herramienta no viene incluida en Microsoft SQL Server 2005 Express, debe descargarse por separado. 15-Febrero-2010 3
Bien, una vez que se tiene instaladas las tres herramientas antes citada, procedemos a crear la base de datos que se utilizará de ejemplo. Para ello, abrimos Microsoft SQL Server Management Studio Express, y entramos con la Authentication de Windows, según se ilustra en la siguiente figura: 15-Febrero-2010 4
Una vez que damos clic en Connect entramos de lleno al Microsoft SQL Server Management Studio Express, y veremos este entorno gráfico: 15-Febrero-2010 5
Ahora, hagamos una carpeta de nombre bd sobre C:\, es decir, hagamos C:\bd. A continuación en Microsoft SQL Server Management Studio Express creamos una nueva base de datos, a la cual llamemos clientes, y para en el casillero de Path en dos dos líneas correspondientes ubicaremos nuestra base de datos clientes en la carpeta previamente creada, es decir, en C:\bd. Según se ilustra a continuación. 15-Febrero-2010 6
Sobre la base de datos clientes, creo una tabla llamada nombres, con la siguiente estructura. A la cual doto con la siguiente información de ejemplo: 15-Febrero-2010 7
Guardamos los datos de la tabla nombres de la base de datos clientes, y salimos de Microsoft SQL Server Management Studio Express. Ahora, nuestro programa en Visual C # tendrá esta forma: En la cual, los botones tendrán los nombres respectivamente de: bt_conectar, bt_actualizar, bt_insertar, bt_borrar, bt_consultar_ordenadamente y bt_salir. Además, tendremos una caja de texto de nombre tx_resultados. 15-Febrero-2010 8
Obtener la cadena de conexión a la base de datos. Ahora requerimos obtener una cadena de conexión a la base de datos. Para ello, recurrimos al menú data, y seleccionamos Add New Data Source, esto en el IDE de Visual C # Express 2008. A continuación seleccionamos Database. Vease la siguiente figura. 15-Febrero-2010 9
Ahora, en Add Connection, buscamos la base de datos clientes.mdf, que recordará se encuentra en C:\bd\. Probamos la conexión con Text Connection, debe dar afirmativo. 15-Febrero-2010 10
A continuación, en Choose Your Data Connection copiamos la cadena de conexión, y cancelamos el proceso. 15-Febrero-2010 11
Ahora, la cadena de conexión copiada tiene esta forma: Data Source=.\SQLEXPRESS;AttachDbFilename=C:\bd\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True Ahora, dado que para C #, el caracter \ tiene una función especial, debemos anular ese efecto agregando otro carácter de \. Por tanto la cadena de conexión queda de esta forma: Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True Codigo inicial del programa. Note las bibliotecas necesarias para el manejo de la base de datos. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using System.Data.Sql; using System.Data.SqlClient; 15-Febrero-2010 12
namespace Connet_to_SQL public partial class Form1 : Form public Form1() InitializeComponent(); private void bt_conectar_click(object sender, EventArgs e) conexion_y_consulta_simple(); 15-Febrero-2010 13
Conexión y consulta sencilla a la base de datos. En el siguiente bloque de código se hará la conexión a la base de datos, y se utilizará la consulta SELECT básica: SELECT * from nombretabla private void bt_conectar_click(object sender, EventArgs e) conexion_y_consulta_simple(); private void conexion_y_consulta_simple() System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(); con.connectionstring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection SQLConnection = new SqlConnection(); try con.open(); MessageBox.Show("Base de datos abierta"); 15-Febrero-2010 14
string commandstring = "SELECT * FROM nombres"; SqlCommand sqlcmd = new SqlCommand(commandString, con); SqlDataReader datareader = sqlcmd.executereader(); tx_resultados.text = ""; while (datareader.read()) tx_resultados.text = tx_resultados.text + datareader["nom"] + ", " + datareader["direccion"] + "====="; datareader.close(); con.close(); MessageBox.Show("Base de datos cerrada"); catch (Exception Ex) MessageBox.Show("Error. La base de datos no pudo ser abierta" + Ex.Message); 15-Febrero-2010 15
Resultado de la ejecución: 15-Febrero-2010 16
Modificación a un registro de la base de datos. En el siguiente bloque se utilizará la instrucción UPDATE, que tiene la forma: UPDATE nombretabla SET nombrecolumna1 = Valor1, nombrecolumna2 = Valor2,, nombrecolumnan = ValorN, WHERE criterios private void bt_actualizar_click(object sender, EventArgs e) actualiza(); private void actualiza() System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(); con.connectionstring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection SQLConnection = new SqlConnection(); try con.open(); 15-Febrero-2010 17
MessageBox.Show("Base de datos abierta..."); string commandstring = "UPDATE nombres SET direccion = 'Xalapa, Ver.' WHERE nom = 'Enrique Ruiz Diaz'"; SqlCommand sqlcmd = new SqlCommand(commandString, con); sqlcmd.executenonquery(); MessageBox.Show("La actualización se efectuó"); catch (Exception Ex) MessageBox.Show("Ocurrió un error: " + Ex.Message); con.close(); MessageBox.Show("Base de datos cerrada"); 15-Febrero-2010 18
Inserción de un registro. Se usará la instrucción INSERT que tiene la forma: INSERT INTO nombretabla (nombrecolumna1, nombrecolumna2,, nombrecolumnan) VALUES (Valor1, Valor2,, ValorN) private void bt_insertar_click(object sender, EventArgs e) inserta(); private void inserta() System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(); con.connectionstring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection SQLConnection = new SqlConnection(); try 15-Febrero-2010 19
con.open(); MessageBox.Show("Base de datos abierta..."); string commandstring = "INSERT INTO nombres (clave, nom, direccion) VALUES ('165', 'Juan López López', 'Tierra Blanca, Ver.')"; SqlCommand sqlcmd = new SqlCommand(commandString, con); sqlcmd.executenonquery(); MessageBox.Show("La Inserción se efectuó."); catch (Exception Ex) MessageBox.Show("Ocurrió un error: " + Ex.Message); con.close(); MessageBox.Show("Base de datos cerrada"); 15-Febrero-2010 20
Borrado de un registro de la base de datos. DELETE tiene esta forma: DELETE FROM nombretabla WHERE criterio private void bt_borrar_click(object sender, EventArgs e) borrar(); private void borrar() System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(); con.connectionstring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection SQLConnection = new SqlConnection(); try con.open(); 15-Febrero-2010 21
MessageBox.Show("Base de datos abierta..."); string commandstring = "DELETE FROM nombres WHERE nom = 'Adelfo Perez González'"; SqlCommand sqlcmd = new SqlCommand(commandString, con); sqlcmd.executenonquery(); MessageBox.Show("El borrado de registro se efectuó."); catch (Exception Ex) MessageBox.Show("Ocurrió un error: " + Ex.Message); con.close(); MessageBox.Show("Base de datos cerrada"); 15-Febrero-2010 22
Consultar ordenadamente La forma ORDER BY es: SELECT nombrecolumna1, nombrecolumna2, FROM nombretabla ORDER BY Columna ASC DESC (Tenemos la opción de elegir bien ascedente o descendente). private void bt_consultar_ordenadamente_click(object sender, EventArgs e) consultar_ordenadamente(); private void consultar_ordenadamente () MessageBox.Show("nuevo"); System.Data.SqlClient.SqlConnection con; con = new System.Data.SqlClient.SqlConnection(); con.connectionstring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\clientes.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection SQLConnection = new SqlConnection(); 15-Febrero-2010 23
try con.open(); MessageBox.Show("Base de datos abierta..."); string commandstring = "SELECT clave, nom, direccion FROM nombres ORDER BY nom ASC"; SqlCommand sqlcmd = new SqlCommand(commandString, con); SqlDataReader datareader = sqlcmd.executereader(); tx_resultados.text = ""; "*****"; while (datareader.read()) tx_resultados.text = tx_resultados.text + datareader["nom"] + ", " + datareader["clave"] + ", " + datareader.close(); MessageBox.Show("La consulta ordenada, se efectuó."); catch (Exception Ex) MessageBox.Show("Ocurrió un error: " + Ex.Message); 15-Febrero-2010 24
Resultado en pantalla: 15-Febrero-2010 25