ACCESO Y MANIPULACIÓN DE DATOS CON ADO

16
1 ACCESO Y MANIPULACIÓN DE DATOS CON ADO.NET Por: Nelson Yessy López Hidalgo E-mail: [email protected] Web: http://webtelematica.wordpress.com Fecha: 10-02-2010 CONTENIDO: 1. Introducción 2. Herramientas a usar 3. Creación de la base de datos y tablas 3.1 Tabla estudiantes 3.2 Tabla cursos 3.3 Tabla matriculas 3.4 Diagrama relacional de las tablas 4. Creación del proyecto en Visual Studio 2005/2008 1. INTRODUCCIÓN En el presente documento se presenta un ejemplo básico de acceso y manipulación de datos usando ADO.NET, el SGBD que se usaremos será SQL Server 2005, pero de igual manera funciona en SQL Server 2008. ADO.NET, es un conjunto de clases y servicios que nos ofrece la plataforma Microsoft .Net Framework, para el acceso y manipulación de datos, es uno de los componentes fundamentales de la plataforma, proporciona diferentes siendo sus principales: Connection: Este objeto es el encargado de establecer la conexión con una fuente de datos determinada. DataSet: De la cual podemos decir que es una representación de la base de datos en la memoria del cliente. Delatable: Representa una un conjunto de registros almacenados en memoria. DataRow: Representa una fila de la clase DataTable. DataReader: Es un objeto que se usa solo hacia adelante. Command: Representa una instrucción SQL. DataAdapter: Es el intermedio (puente) entre una fuente de datos(Sql Server) y un almacén de datos (DataSet, DataTable, DataReader) 2. HERRAMIENTAS A USAR Debemos verificar que contamos con las siguientes herramientas debidamente preparadas Visual Studio 2008 o Visual C# Express Edition 2005/2008 Lenguaje de programación C# 3.0 SQL Server 2005/2008 SQL Magnament Studio Windows XP/Vista o Windows 7 PC de escritorio mínimo con 500 MB de memoria RAM.

Transcript of ACCESO Y MANIPULACIÓN DE DATOS CON ADO

Page 1: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

1

ACCESO Y MANIPULACIÓN DE DATOS CON ADO.NET

Por: Nelson Yessy López Hidalgo E-mail: [email protected]

Web: http://webtelematica.wordpress.com Fecha: 10-02-2010

CONTENIDO:

1. Introducción

2. Herramientas a usar

3. Creación de la base de datos y tablas

3.1 Tabla estudiantes

3.2 Tabla cursos

3.3 Tabla matriculas

3.4 Diagrama relacional de las tablas

4. Creación del proyecto en Visual Studio 2005/2008

1. INTRODUCCIÓN

En el presente documento se presenta un ejemplo básico de acceso y manipulación de datos usando ADO.NET, el SGBD

que se usaremos será SQL Server 2005, pero de igual manera funciona en SQL Server 2008.

ADO.NET, es un conjunto de clases y servicios que nos ofrece la plataforma Microsoft .Net Framework, para el acceso y

manipulación de datos, es uno de los componentes fundamentales de la plataforma, proporciona diferentes siendo sus

principales:

� Connection: Este objeto es el encargado de establecer la conexión con una fuente de datos determinada.

� DataSet: De la cual podemos decir que es una representación de la base de datos en la memoria del cliente.

� Delatable: Representa una un conjunto de registros almacenados en memoria.

� DataRow: Representa una fila de la clase DataTable.

� DataReader: Es un objeto que se usa solo hacia adelante.

� Command: Representa una instrucción SQL.

� DataAdapter: Es el intermedio (puente) entre una fuente de datos(Sql Server) y un almacén de datos (DataSet,

DataTable, DataReader)

2. HERRAMIENTAS A USAR

Debemos verificar que contamos con las siguientes herramientas debidamente preparadas

� Visual Studio 2008 o Visual C# Express Edition 2005/2008

� Lenguaje de programación C# 3.0

� SQL Server 2005/2008

� SQL Magnament Studio

� Windows XP/Vista o Windows 7

� PC de escritorio mínimo con 500 MB de memoria RAM.

Page 2: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

2

3. CREACIÓN DE LA BASE DE DATOS

Para el ejemplo vamos a crear una base de datos llamada “bd2010” la cual contendrá 3 tablas (estudiantes, cursos y

matriculas).

Abrimos SQL Managment Studio (Inicio – Todos los programas – Microsoft SQL Server 2005 - SQL Server Management

Studio Express) como se muestra en la siguiente imagen:

Al momento de conectar al servidor, cambiemos el nombre del servidor a (local)\SQLEXPRESS como se muestra en la

imagen:

Luego creamos la base de datos con sus respectivas tablas:

Page 3: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

3

Ingresamos el nombre de la base de datos en este ejemplo “bd2010” y presionamos el botón aceptar, como se muestra

en la imagen:

3.1 Creación de la tabla estudiantes

Luego en el explorador de objetos buscamos la nueva base de datos que acabamos de crear, desplegamos el árbol y en la

carpeta tablas hacemos clic derecho “Nueva tabla...”

Page 4: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

4

Creamos la tabla estudiantes con los siguientes campos: identificacion, pri_nom, seg_nom, pri_ape, seg_ape, genero,

telefono, direccion, los tipos de datos son como se muestra en la siguiente imagen:

Establecemos como clave principal el campo identificación:

Presionamos el botón guardar y digitamos el nombre de la tabla en este caso “estudiantes”

3.2 Creación de la tabla cursos:

Nuevamente hacemos clic derecho sobre la carpeta tablas y seleccionamos la opción “Nueva tabla...” como se ilustra a

continuación:

Page 5: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

5

La tabla contara con dos campos id y nombre, los tipos de datos son como se muestra en la siguiente imagen:

Establecemos el campo id como clave principal ¸

Presionamos guardar y escribimos el nombre de la tabla “cursos”

3.3 Creación de la tabla matriculas

La tabla matriculas tendrá 4 campos id, id_estudiante, id_curso y fecha_matricula, nuevamente hacemos clic derecho

sobre la carpeta tablas y seleccionamos la opción “Nueva tabla...” como se ilustra a continuación:

Page 6: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

6

Luego de crear la tabla hacemos clic derecho sobre el campo id y seleccionamos la opción establecer clave principal:

Por ultimo hacemos clic en la opción guardar y escribimos el nombre de la tabla “matriculas”

3.4 Creación del diagrama de la base de datos

Hacemos clic derecho sobre la carpeta “Diagramas de bases de datos”, nos aparecerá una ventana haciendo una

pregunta a la cual reapoderemos “yes”

Nuevamente hacemos clic derecho sobre la carpeta “Diagramas de bases de datos” y seleccionamos la opción “Nuevo

diagrama de bases de datos”

Page 7: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

7

Seleccionamos las tres tablas, pulsamos el botón agregar y luego cerrar:

Luego organizamos las 3 tablas de esta manera:

Seleccionamos la llave principal (llave primaria) de la tabla estudiantes (identificación) y presionando el botón izquierdo

del Mouse arrastramos la llave (identificación) hasta la tabla matriculas

Page 8: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

8

Presionamos el botón aceptar, y repetimos los mismos pasos con la tabla cursos, el resultado final se muestra en la

siguiente imagen:

4. Creación del proyecto

Abrimos Visual Studio 2005/2008

Creamos un nuevo proyecto

Page 9: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

9

Seleccionamos Visual C# - Windows – Aplicación para Windows, escribimos el nombre del proyecto en este caso he

puesto AplicacionADO, por ultimo presionamos el botón aceptar

Al formulario que nos crea por defecto le cambiamos el nombre a frmPrincipal

Page 10: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

10

Tener cuidado con la extensión el archivo debe terminar en .cs (frmPrincipal.cs)

Al cuadro de confirmación que nos aparece presionamos el botón si

Modificamos la propiedad text del formulario a: Formulario principal

Desde el ToolBox o cuadro de herramientas ubicado en la parte izquierda de Visual Studio agregamos un control

MenuStrip

Creamos el siguiente menú:

Page 11: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

11

Creamos el formulario estudiantes, haciendo clic derecho en el proyecto, desde el explorador de objetos como se

muestra en la siguiente imagen:

Al nuevo formulario lo llamaremos “frmEstudiantes” como se muestra a continuación:

El formulario frmEstudiantes deberá contener los siguientes elementos:

Objeto Propiedad Valor

GroupBox1 (Dentro de este control irán todos los siguientes)

name GroupBox1 Text Información básica

labell name lblIdentificacion

Page 12: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

12

text Identificación

TextBox1 name txtIdentificacion label2 name lblPri_nom

text Primer nombre

TextBox2 name txtPri_nom

label3 name lblSeg_nom

text Segundo nombre

TextBox3 name txtSeg_nom

label4 name lblPri_ape

text Primer apellido

TextBox4 name txtPri_ape

label5 name lblSeg_ape

text Segundo apellido

TextBox5 name txtSeg_ape

label6 name cboGenero text Genero

ComboBox1 name cboGenero Label7 name lblTelefono text Teléfono

TextBox6 name txtTelefono

GroupBox1 (Dentro de este control irán todos los siguientes)

name GroupBox2

text Acciones

button1 name btnPrimero

text << button2 name btnAnterior text <

button3 name btnSiguiente text > button4 name btnUltimo text Ultimo

button5 name btnGuardar text Guardar

button6 name btnEditar

text Editar

button7 name btnBuscar

Page 13: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

13

text Buscar

button8 name btnEliminar text Eliminar

button9 name btnCerrar

text Cerrar

El resultado de lo anterior deberá ser un formulario como el siguiente:

Código fuente del formulario:

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;

//Espacio de nombres requerido para interactuar con Sql Server

using System.Data.SqlClient;

namespace ApliacacionADO

{

public partial class frmEstudiantes : Form

{

//Instancias

//Conexion objeto del tipo SqlConnection para conectarnos fisicamente a la base de datos

SqlConnection Conexion = new SqlConnection();

//Comando objeto del tipo SqlCommand para representar instrucciones SQL

SqlCommand Comando;

//Adaptador objeto del tipo SqlDataAdapter para para intercambiar datos entre una

// fuente de datos (en este caso Sql Server) y un alamacen de datos (DataSet, DataTable, DataReader)

SqlDataAdapter Adaptador=null;

//Tabla objeto del tipo DataTable representa una colección de registros en memeria del cliente

DataTable Tabla = new DataTable();

//Variables

String Sql=""; //Variable de tipo String para almacenar instrucciones SQL

String Servidor = @"(local)\SQLEXPRESS"; //Variable de tipo String para almacenar el nombre de la Instancia SQL Server

String Base_Datos = "bd2010"; //Variable de tipo String para almacenar el nombre de la base de datos

int indice=0;

//Metodo Conectar *********************************************************************

void Conectar()

{

try

{

//Para establecer la conexion con el servidor debemos usar el objeto Conexion

//especificando a traves de su propiedad ConnectionString el nombre del servidor, la bases de datos

Page 14: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

14

//y el timpo de seguridad

Conexion.ConnectionString="Data Source="+Servidor+";" +

"Initial Catalog="+Base_Datos+";"+

"Integrated security=true";

try //Bloque try catch para captura de exepciones en ejecución

{

Conexion.Open(); //Abrimos la conexión

}

catch (SqlException ex)

{

MessageBox.Show("Error al tratar de establecer la conexión " + ex.Message);

}

}

catch (SqlException ex)

{

MessageBox.Show("Error en la conexión: "+ex.Message);

}

}

//*********************************************************************

//Este metodo recibe como parametro un indice correspondiente al registro a cargar

void CargarDatos(int indice)

{

if (Tabla.Rows.Count > 0) //Si el objeto Tabla posee registros procedemos a realizar la asignación

{

DataRow fila = Tabla.Rows[indice]; //Creamos una fila del Objeto Tabla

//Asignamos los valores correspondientes a cada registro

txtIdentificacion.Text = fila["identificacion"].ToString();

txtPri_nom.Text = fila["pri_nom"].ToString();

txtSeg_nom.Text = fila["seg_nom"].ToString();

txtPri_ape.Text = fila["pri_ape"].ToString();

txtSeg_ape.Text = fila["seg_ape"].ToString();

cboGenero.Text = fila["genero"].ToString();

txtTelefono.Text = fila["telefono"].ToString();

txtDireccion.Text = fila["direccion"].ToString();

}

else

{

MessageBox.Show("No hay registros para mostrar");

}

}

//Metodo para refrescar el DataTable despues de insertar,modificar o eliminar registros

void RefrescarDatos()

{

//seleccionamos todos los datos de la tabla personal

Sql = "select * from estudiantes";

Adaptador = new SqlDataAdapter(Sql, Conexion); //pasamos los parametros al adaptador

Tabla.Clear(); //limpiamos antes de llenar el objeto oTabla

Adaptador.Fill(Tabla); //llenamos la tabla

}

public frmEstudiantes() //Constructor de la clase

{

InitializeComponent();

}

private void frmEstudiantes_Load(object sender, EventArgs e)

{

Conectar();

//Cargamos el obejeto tabla con todos los registros de la tala estudiantes

Sql = "select * from estudiantes";

Adaptador = new SqlDataAdapter(Sql, Conexion);

Adaptador.Fill(Tabla);

//Llmamos el metodo CargarDatos para tan pronto se lance el formulario asigne

//a las cajas de texto los valores correspondientes al primer registro de la tabla

CargarDatos(indice);

}

private void btnGuardar_Click(object sender, EventArgs e)

{

//Instrucción SQL

Sql = "insert into estudiantes(identificacion, pri_nom, seg_nom, pri_ape, seg_ape, genero, telefono, direccion)" +

"values(@identificacion,@pri_nom,@seg_nom,@pri_ape,@seg_ape,@genero, @telefono,@direccion)";

//Pasamos al objeto comando la instrucción SQL a ejecutar y el objeto Conexion

Comando = new SqlCommand(Sql, Conexion);

Comando.Parameters.AddWithValue("@identificacion",txtIdentificacion.Text);

Comando.Parameters.AddWithValue("@pri_nom",txtPri_nom.Text);

Comando.Parameters.AddWithValue("@seg_nom",txtSeg_nom.Text);

Comando.Parameters.AddWithValue("@pri_ape",txtPri_ape.Text);

Comando.Parameters.AddWithValue("@seg_ape",txtSeg_ape.Text);

Page 15: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

15

Comando.Parameters.AddWithValue("@genero", cboGenero.Text);

Comando.Parameters.AddWithValue("@telefono",txtTelefono.Text);

Comando.Parameters.AddWithValue("@direccion", txtDireccion.Text);

try //Bloque try catch para captura de exepciones en ejecución

{

Comando.ExecuteNonQuery(); //Ejecutamos la instrucción SQL

MessageBox.Show("Registro insertado");

}

catch (Exception ex)

{

MessageBox.Show("Error: " + ex.Message);

}

}

private void btnEditar_Click(object sender, EventArgs e)

{

Sql = "update estudiantes set pri_nom=@pri_nom, seg_nom=@seg_nom, pri_ape=@pri_ape, seg_ape=@seg_ape, genero=@genero," +

"telefono=@telefono, direccion=@direccion where identificacion=@identificacion";

Comando = new SqlCommand(Sql, Conexion);

Comando.Parameters.AddWithValue("@identificacion", txtIdentificacion.Text);

Comando.Parameters.AddWithValue("@pri_nom", txtPri_nom.Text);

Comando.Parameters.AddWithValue("@seg_nom", txtSeg_nom.Text);

Comando.Parameters.AddWithValue("@pri_ape", txtPri_ape.Text);

Comando.Parameters.AddWithValue("@seg_ape", txtSeg_ape.Text);

Comando.Parameters.AddWithValue("@genero", cboGenero.Text);

Comando.Parameters.AddWithValue("@telefono", txtTelefono.Text);

Comando.Parameters.AddWithValue("@direccion", txtDireccion.Text);

try //Bloque try catch para captura de exepciones en ejecución

{

Comando.ExecuteNonQuery();

MessageBox.Show("Registro editado");

RefrescarDatos();

}

catch (Exception ex)

{

MessageBox.Show("Error: " + ex.Message);

}

}

private void btnCerrar_Click(object sender, EventArgs e)

{

Conexion.Close();

this.Dispose();

}

private void btnBuscar_Click(object sender, EventArgs e)

{

if (Tabla.Rows.Count > 0)

{

int id=int.Parse(txtIdentificacion.Text);

DataRow[] fila = Tabla.Select(String.Format("identificacion={0}", id)); //Buscamos la fila deseada

if (fila.Length > 0)//Si se encontro la fila

{

indice = Tabla.Rows.IndexOf(fila[0]); //Obtenemos el indice la fila buscada

//Pasamos el indice como parametro al metodo CargarDatos

CargarDatos(indice);

}

else

{

MessageBox.Show("El estudiantes que buscas no esta registrado");

}

}

else

{

MessageBox.Show("No hay registros");

}

}

private void btnEliminar_Click(object sender, EventArgs e)

{

Sql = "delete from estudiantes where identificacion=@identificacion";

Comando = new SqlCommand(Sql, Conexion);

Comando.Parameters.AddWithValue("@identificacion", txtIdentificacion.Text);

try //Bloque try catch para captura de exepciones en ejecución

{

Comando.ExecuteNonQuery();

MessageBox.Show("Registro eliminado");

Page 16: ACCESO Y MANIPULACIÓN DE  DATOS CON ADO

16

RefrescarDatos();

}

catch (SqlException ex)

{

MessageBox.Show("Error: " + ex.Message);

}

}

private void btnPrimero_Click(object sender, EventArgs e)

{

indice = 0;

CargarDatos(indice);

}

private void btnAnterior_Click(object sender, EventArgs e)

{

if (Tabla.Rows.Count > 0 && indice > 0)

{

indice = indice - 1;

CargarDatos(indice);

}

}

private void btnSiguiente_Click(object sender, EventArgs e)

{

if (indice < Tabla.Rows.Count -1)

{

indice = indice + 1;

CargarDatos(indice);

}

}

private void btnUltimo_Click(object sender, EventArgs e)

{

if (Tabla.Rows.Count > 0)

{

indice = Tabla.Rows.Count - 1;

CargarDatos(indice);

}

}

}

}

Descargar código fuente del ejemplo:

http://cid-409e17cc56f28a81.skydrive.live.com/self.aspx/.Public/Punto%20Net/ApliacacionADO.net.zip

Referencias bibliográficas:

http://msdn.microsoft.com/es-es/library/e80y5yhx(VS.80).aspx