miércoles, 10 de octubre de 2012

[C#] Realizar una conexión con SQL server

 

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:
CREATE DATABASE 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…:


Untitled[5]



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

Untitled


 



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

Untitled



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


Untitled


En la pantalla que nos aparece, seleccionamos, nombre de servidor, tipo de autenticación, y siendo el caso el usuario y la contraseña.


Untitled


Clic en el botón Connect, expandimos el nodo de la base de datos Prueba, y ejecutamos alguna sentencia cómo manera de ensayo:



SELECT GETDATE()


Como ven, este usuario ya puede ingresar a la base de datos y ejecutar sentencias de algún tipo Open-mouthed smile


 


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


 


Untitled


 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:


Untitled


Le cambiamos la extensión de .txt a .udl, el nombre no importa, yo lo llamé Conexion.


Untitled


Abrimos el archivo y nos vamos a la pantalla Provider:


Untitled


 


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.


Untitled


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:


Untitled


Luego hacemos clic en el botón Ok.


Conformamos el siguiente dialogo:


Untitled


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.


Untitled


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:


Untitled


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

2 comentarios:

  1. Muy buena información, sólo que no entendí desde dónde debo acceder para crear un "Nuevo Archivo de Texto", no lo especifica. Y es el primer paso de todos... Podrías detallarme esto? Gracias!

    ResponderEliminar
  2. Hola,

    La verdad no te entiendo bien la pregunta, sin embargo el archivo de texto se puede crear en cualquier ubicación, lo debes de tener en cuenta es que el motor de base de datos debe de ser accesible en terminos de RED desde la ubicación donde estás creando el txt...

    Si es en la misma máquina no vas a tener problemas, pero si instalaste el motor en una maquina A y estás creando el txt o udl desde una maquina B, debes de tener en cuenta que deben de estar dentro de la misma red.

    Saludos Unknown,

    ResponderEliminar