Introducción
Una tarea muy sencilla, pero que se convierte en una piedra en el zapato para los que comenzamos a desarrollar sistemas de información, es la de realizar una conexión correctamente con una base de datos (en este caso SQL server) y ejecutar algunas sentencias.
Que es una conexión a base de datos y para que se utiliza ?
Una conexión es como una clase de puente que realizamos desde nuestro lenguaje de programación hasta una base de datos, y se utiliza para acceder a ciertos recursos que nos provee el motor de base de datos, estos recursos entre otras cosas son poder ejecutar sentencias de algún tipo.
Para poder acceder a un motor de bases de datos necesitamos autenticarnos, entonces uno de los primeros pasos será crear unas credenciales con suficientes permisos para ejecutar sentencias !
Creamos la base de datos
- Ingresamos al SQL management studio y ejecutamos esta sentencia para crear una base de datos de prueba:
Creamos el usuario
- Creamos un usuario (este también se puede crear por sentencias, pero me parece mas engorroso que por el management studio), navegamos entre los nodos hasta:
Security – Logins
Clic derecho sobre Logins y seleccionamos New Login…:
- No abre la siguiente pantalla donde en la pestaña General podemos seleccionar el tipo de autenticación (Integrada con windows o de SQL server), politicas de seguridad de contraseña:
- Luego nos vamos a la pestaña User Mapping, aquí podremos seleccionar la base de datos a la que lo deseamos asociar y uno de varios roles que vienen por defecto:
- Observen que seleccione la base de datos Prueba (que creamos previamente ) y el rol db_owner, este rol es como el administrador (permite ejecutar cualquier tipo de sentencia), dependiendo de la necesidad, seleccionariamos el tipo de rol; por ejemplo: db_datareader (definimos permisos de lectura) y sobre db_datawriter (definimos permisos de escritura).
- Damos clic en el botón Ok y tendremos nuestro usuario creado.
Probamos el usuario
Una vez creado, no esta de más probar que funcione correctamente un inicio de sesión
Hacemos clic en Connect Y seleccionamos Database Engine …
En la pantalla que nos aparece, seleccionamos, nombre de servidor, tipo de autenticación, y siendo el caso el usuario y la contraseña.
Clic en el botón Connect, expandimos el nodo de la base de datos Prueba, y ejecutamos alguna sentencia cómo manera de ensayo:
Como ven, este usuario ya puede ingresar a la base de datos y ejecutar sentencias de algún tipo
Crear la tabla
Para hacer el ejemplo mas completo, vamos a crear una tabla de prueba llamada Empleados y le adicionamos algunos registros:
CREATE TABLE Empleados (IdEmpleado INT IDENTITY(1,1), Nombres VARCHAR(50), Apellidos VARCHAR(50), Correo VARCHAR(50), Telefono VARCHAR(50))
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Aquiles', 'Brinco', 'aquilesbrinco@outlook.com', '4010068')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Armando', 'Casas', 'armandocasas@outlook.com', '64681684')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Débora', 'Melo', 'deboramelo@outlook.com', '651674')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Elsa', 'Pato', 'elsapato@outlook.com', '698541488')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Susana', 'Oria', 'susanaoria@outlook.com', '546654651654')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Aquiles', 'Bailo', 'aquilesbailo@outlook.com', '5465465465')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Elvio', 'Lao', 'elviolao@outlook.com', '301864546')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Elva', 'Gina', 'elvagina@outlook.com', '654687486')
INSERT INTO Empleados (Nombres, Apellidos, Correo, Telefono) VALUES ('Elmer', 'Curio', 'elmercurio@outlook.com', '3017768305')
Para visualizar nuestra información, basta con hacer un select a la tabla desde el Management Studio:
SELECT IdEmpleado, Nombres, Apellidos, Correo, Telefono
FROM Empleados
Con esto ya tenemos listo lo que debemos hacer a nivel del motor de base de datos.
Crear string de conexión
Una pregunta muy realizada, es cómo crear el string de conexión; es decir, en que orden debe de ir el usuario, la base de datos, la clave, etc para poder conectarme con el motor como lo hicimos con el SQL Management Studio ….
La solución, es crear un archivo .udl, este nos proveé una pantalla (parecida a la de SQL server) en la que vamos a poder crear nuestro string de conexión.
Entonces creamos un nuevo archivo de texto:
Le cambiamos la extensión de .txt a .udl, el nombre no importa, yo lo llamé Conexion.
Abrimos el archivo y nos vamos a la pantalla Provider:
Verificamos que esté seleccionado SQL server, luego cambiamos a la pestaña Connection e ingresamos nombre de servidor, tipo de autenticación, y siendo el caso el usuario y la contraseña.
Muy importante seleccionar la lista de chequeo Allow saving password (eso nos permitirá que la clave quede almacenada en el string de conexión) y seleccionar la base de datos.
Hacemos clic en el botón Test Connection y si todo lo hicimos bien, nos saldrá un mensaje como este:
Luego hacemos clic en el botón Ok.
Conformamos el siguiente dialogo:
Basicamente nos avisa que la contraseña se va a guardar en el archivo.
Luego, hacemos clic derecho sobre el .udl y lo abrimos con un editor de texto:
Como verán, este es el contenido del archivo:
[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Password=a54321;Persist Security Info=True;User ID=Administrador;Initial Catalog=Prueba;Data Source=C-CPEREZ\SQL2008R2
Y el string de conexión es el que esta en negrita.
Realizar la conexión desde el lenguaje de programación (C#)
Una vez hayamos cumplido los pasos anteriores, nos disponemos a crear un proyecto de tipo Consola en Visual Studio.
En el Mein ingresamos el siguiente código:
static void Main(string[] args)
{
var ConnectionString = @"Password=a54321;Persist Security Info=True;User ID=Administrador;Initial Catalog=Prueba;Data Source=C-CPEREZ\SQL2008R2";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
using (SqlCommand Command = new SqlCommand("SELECT IdEmpleado, Nombres, Apellidos, Correo, Telefono FROM Empleados", con))
using (SqlDataReader Reader = Command.ExecuteReader())
{
while (Reader.Read())
{
Console.WriteLine("{0} - {1} - {2} - {3} - {4}",
Reader.GetInt32(0), Reader.GetString(1), Reader.GetString(2), Reader.GetString(3), Reader.GetString(4));
}
}
}
Console.ReadKey();
}
Observen que la variable ConnectionString tiene lo que nos genero el .udl
Estamos llendo a base de datos y ejecutando la siguiente sentencia:
SELECT IdEmpleado, Nombres, Apellidos, Correo, Telefono
FROM Empleados
Recuperamos lo que nos retornó la consulta y lo lo visualizamos en la consola:
De esa misma manera podemos ejecutar nuestras instrucciones INSERT, UPDATE, DELETED para realizar cualquier tipo de operación a la información !!!!
Código
Desde el siguiente link, pueden descargarse el ejemplo realizado con Visual Studio 2010 y SQL server 2008 R2.
Descargar Código