Professional Documents
Culture Documents
NET
SQL (Structured Query Language)
Lenguaje de Acceso a Datos (No es un Lenguaje de Programación). Sirve para
comunicarse con la base de datos a través del esquema de trasmitirle instrucciones tales
como:
Select ( Consultar Datos)
Insert ( Agregar Registros)
Update ( Actualizar o Modificar Registros)
Delete ( Borrar Registros)
Siempre que se acceda a una BD se hará a través de un Proveedor. Este captara las
instrucciones en formato SQL y lo trasmite según el lenguaje interno de la BD al motor
interno de la BD para llevar a cabo las operaciones requeridas por parte de la aplicación.
Existen dos tipos de proveedores para acceder a una BD. OleDB (Tecnología Microsoft) y
ODBC (Tecnología Abierta).
1
En Visual Studio la figura del Data Consumer (Aplicación Consumidora de la Información
de la BD) es representada por ADO.NET
ESCENARIO CONECTADO
CADENA DE CONEXIÓN
Es una cadena de texto formada por parámetros separados por ( ; ) que aprta toda la
información necesaria para establecer una conexión a una base de datos (¿Cual BD?,¿
Donde esta la BD?, Autentificación de la conexión).
Parámetro Initial Catalog: Este solo tendrá uso en ciertas BD, concretamente en bd’s
tipo sql y mySql, y será para indicar a que base de datos se tendrá que conectar en el
servidor indicado.
Parametro Integrated Security: Este parámetro solo es para el caso de las bd’s de
sql server proporciona una identificación para acceder a la base de datos en el esquema
basado en la identidad del usuario, no hace falta aportar credenciales sino que el
usuario que está ejecutando la aplicación que se conecta a la base de datos ya tene
permiso en el servidor SQL server, es decir se le dice en la cadena de conexión que la
identidad del usuario es la misma que la identidad que está ejecutando en este
momento la conexión a través de esta cadena.
Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\FACTORIADEPROYECTOS\WinGestionComercal\Neptuno.mdb
Ejemplo de Cadena de Conexión para la BD de SQL SERVER llamada Demo para el
Proyecto WinGestionComercial en Visual Studio 2010
4
COMO UTILIZAR LA CADENA DE CONEXION DESDE
ADO .NET
LOS OBJETOS (xxx)Connection son los que van a permitir hacer la conexión con la DB
según sea el caso. Para ello es necesario dar vida a un Objeto xxxConnection, sin
embargo el hecho de definirlo e instanciarlo no significa que tenemos una conexión, para
ello es necesario indicarle la cadena de conexión.
5
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// clases necesarias para Objetos Acces y Sql
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace ObjetosConnection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// DEFINICION DE OBJETOS xxxConnection
private OleDbConnection conexionAccess;
private SqlConnection conexionSql;
6
private void button2_Click(object sender, EventArgs e) {
try {
if (conexionSql.State == ConnectionState.Open) {
MessageBox.Show("La conexion a SQL Express ya esta establecida");
} else {
conexionSql.Open(); // Establece la Conexion a SQL Express
MessageBox.Show("Conexion a SQL Express establecida con Extio!!!");
}
} catch (Exception ex) {
MessageBox.Show("Error - No se ha podido establecer la conexion a SQL Express" + ex.Message); }
}
7
FORMAS DE USAR LAS CONEXIONES
CONEXION PUNTUAL
Se trata de que a través de un objeto xxxConnection cada vez que se produce una
solicitud por parte del usuario este hace una conexión a la base de datos, solicita la
información y cierra la conexión, es decir un código donde cada vez que el usuario de la
clase solicite una acción contra la BD, abriremos conexión, realizaremos la acción y
cerraremos la conexión.
8
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
namespace ObjetosConnection
{
// Esqueleto de una clase que realiza una conexion puntual
class ConexionPuntual
{
//unico metodo y solo hasta ke se invoca este metodo es cuando se crea el objeto
xxxConnection
try {
conexionAccess.Open();
// MANEJO DE EXCEPCIONES
} finally {
if ( conexionAccess.State != ConnectionState.Closed) {
}
}
CONEXION RETENIDA
9
Se trata de un objeto que en el momento de crearlo establece una conexión hacia la
base de datos, es decir, abre conexión y mantiene esa conexión abierta, luego cada una
de las solicitudes que le vayan llegando irán siendo atendidas a través de esta conexión
sin necesidad de volver a abrir esta conexión, es decir cada solicitud utilizara la misma
conexión; ahora bien al final de trabajar con el objeto debemos asegurarnos de alguna
forma de cerrar la conexión.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
10
using System.Data;
using System.Data.OleDb;
namespace ObjetosConnection
{
// Esqueleto de una clase que realiza una conexion puntual implementando la interfaz
IDisposable para poder hacer uso del método Dispose que usan los formularios por parte de la
clase que hemos creado y agregándole el código que permite cerrar la conexion.
public ConexionRetenida()
{
conexionAccess = new OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\\FACTORIADEPROYECTOS\\WinGestionComercal\\Neptuno.mdb");
conexionAccess.Open();
}
try
{
}
catch (Exception ex)
{
// MANEJO DE EXCEPCIONES
}
}
}
11
Formulario que utiliza los dos tipos de conexiones implementando las 2 clases vistas
anteriormente
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;
namespace ObjetosConnection
{
public partial class FrmConexiones : Form
{
public FrmConexiones()
{
InitializeComponent();
}
/*
//Conexion Retenida
12
EVENTOS DE UNA CONEXIÓN
InfoMessage: Ocurre cuando una base de datos devuelve un mensaje de informacion.
No es un error.
StateChange: Ocurre cuando una conexión pasa de Abierta a Cerrada o viceversa.
Para hacer esto necesitamos saber que tipo de handler se necesita para gestionar el
evento. Y esto los podemos ver atraves del examinador de objetos localizando la clase
DbConnection en su evento StateChange
13
CLASE
EVENTO
CLICK
AQUI
COPIAR ESTOS
PARAMETROS A LA
FUNCION QUE SE VA A
CREAR
14
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// clases necesarias para Objetos Acces y Sql
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace ObjetosConnection
{
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
// DEFINICION DE OBJETOS xxxConnection
private OleDbConnection conexionAccess;
private SqlConnection conexionSql;
// sobre escribiendo el evento con el evento creado por nosotros para determinar
el estado
e informarlo
conexionAccess.StateChange += estadoConecction;
conexionSql.StateChange += estadoConecction;
}
// funcion a manera de evento con el mismos manejador para sobre escribir el evento
del objeto
XxxConecction
if (sender.Equals(conexionAccess)) {
MessageBox.Show("Base de Datos Access :" + e.CurrentState.ToString());
}
else {
MessageBox.Show("Base de Datos SQL Expess :" + e.CurrentState.ToString());
}
}
15
// evento del boton para establecer conexion a Access
private void button1_Click(object sender, EventArgs e) ...
// evento del boton para establecer conexion a SQL Express
private void button2_Click(object sender, EventArgs e) ...
// evento del boton para cerrar conexion a Access
private void button4_Click(object sender, EventArgs e) ...
// evento del boton para cerrar conexion a SQL Express
private void button3_Click(object sender, EventArgs e) ...
}
}
16
A este objeto hay que establecerle claramente dos propiedades escenciales:
1 ro. La instrucción: Es decir el comando, en este caso la instrucción SQL que queremos
enviar a la base de datos (select, update, delete, etc) para llevar a cabo la operación
sobre la BD que deseamos hacer.
2 do. La Conexión: Que conexión va a utilizar este comando. Una vez especificada la
conexión que debe utilizar el objeto XxxCommand este puede enviar la instrucción
hacia el servidor.
CommandType: Esta es la que sirve para especificar qué tipo de instrucción se está
enviando a la BD.
17
Connection: Propiedad que se utiliza para indicar al XxxCommand el tipo de conexión
que deberá utilizar para conectarse a lña BD, es decir el objeto XxxConnection que
hayamos creado para establecer la conexión a la BD.
La forma en que se ejecuta el XxxComnand es decir cómo se le ordena que lleve a cabo
la acción (instrucción ) contra la BD, depende de lo que esperemos obtener como
respuesta de la BD.
SE ENVIA LA INTRUCCION A LA BD
EN SQL
LA BD DEVUALVE COMO
RESPUESTA
UN UNICO VALOR DE TIPO
SE ENVIA LA INTRUCCION A LA BD
EN SQL
LA BD DEVUALVE COMO
RESPUESTA
UN CONJUNTO DE RESULTADOS
ATRAVES DE UN BOJETO
DATAREADER
18
c) MODIFICACION (No se espera que la BD devuelve campos de la tabla con
información porque lo que se hace es una inserción una actualización o una
eliminación, etc)
SE ENVIA LA INTRUCCION A LA BD
EN SQL
LA BD DEVUALVE COMO
RESPUESTA
UN BOJETO DE TIPO INT
INDICANDO EL NUMERO DE
FILAS AFECTADAS POR LA
19