You are on page 1of 16

ACCESO Y MANIPULACIN DE DATOS CON ADO.

NET
Por: Nelson Yessy Lpez Hidalgo E-mail: nelson.hidalgo@misena.edu.co Web: http://webtelematica.wordpress.com Fecha: 10-02-2010 CONTENIDO: 1. Introduccin 2. Herramientas a usar 3. Creacin 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. Creacin del proyecto en Visual Studio 2005/2008 1. INTRODUCCIN En el presente documento se presenta un ejemplo bsico de acceso y manipulacin 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 manipulacin 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 conexin con una fuente de datos determinada. DataSet: De la cual podemos decir que es una representacin 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 instruccin SQL. DataAdapter: Es el intermedio (puente) entre una fuente de datos(Sql Server) y un almacn 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 programacin C# 3.0 SQL Server 2005/2008 SQL Magnament Studio Windows XP/Vista o Windows 7 PC de escritorio mnimo con 500 MB de memoria RAM. 1

3. CREACIN 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:

Ingresamos el nombre de la base de datos en este ejemplo bd2010 y presionamos el botn aceptar, como se muestra en la imagen:

3.1 Creacin 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...

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

Presionamos el botn guardar y digitamos el nombre de la tabla en este caso estudiantes 3.2 Creacin de la tabla cursos: Nuevamente hacemos clic derecho sobre la carpeta tablas y seleccionamos la opcin Nueva tabla... como se ilustra a continuacin:

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 Creacin 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 opcin Nueva tabla... como se ilustra a continuacin:

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

Por ultimo hacemos clic en la opcin guardar y escribimos el nombre de la tabla matriculas 3.4 Creacin 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 opcin Nuevo diagrama de bases de datos 6

Seleccionamos las tres tablas, pulsamos el botn agregar y luego cerrar:

Luego organizamos las 3 tablas de esta manera:

Seleccionamos la llave principal (llave primaria) de la tabla estudiantes (identificacin) y presionando el botn izquierdo del Mouse arrastramos la llave (identificacin) hasta la tabla matriculas

Presionamos el botn aceptar, y repetimos los mismos pasos con la tabla cursos, el resultado final se muestra en la siguiente imagen:

4. Creacin del proyecto Abrimos Visual Studio 2005/2008

Creamos un nuevo proyecto

Seleccionamos Visual C# - Windows Aplicacin para Windows, escribimos el nombre del proyecto en este caso he puesto AplicacionADO, por ultimo presionamos el botn aceptar

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

Tener cuidado con la extensin el archivo debe terminar en .cs (frmPrincipal.cs) Al cuadro de confirmacin que nos aparece presionamos el botn 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:

10

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

El formulario frmEstudiantes deber contener los siguientes elementos: Objeto GroupBox1 (Dentro de este control irn todos los siguientes) labell Propiedad name Text name Valor GroupBox1 Informacin bsica lblIdentificacion 11

text TextBox1 label2 name name text name name text name name text TextBox4 label5 name name text TextBox5 label6 ComboBox1 Label7 TextBox6 GroupBox1 (Dentro de este control irn todos los siguientes) button1 button2 button3 button4 button5 name name text name name text name name text name text name text name text name text name text name text button7 name

Identificacin txtIdentificacion lblPri_nom Primer nombre txtPri_nom lblSeg_nom Segundo nombre txtSeg_nom lblPri_ape Primer apellido txtPri_ape lblSeg_ape Segundo apellido txtSeg_ape cboGenero Genero cboGenero lblTelefono Telfono txtTelefono GroupBox2 Acciones btnPrimero << btnAnterior < btnSiguiente > btnUltimo Ultimo btnGuardar Guardar btnEditar Editar btnBuscar 12

TextBox2 label3 TextBox3 label4

button6

text button8 button9 name text name text El resultado de lo anterior deber ser un formulario como el siguiente:

Buscar btnEliminar Eliminar btnCerrar Cerrar

Cdigo 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 coleccin 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

13

//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 ejecucin { Conexion.Open(); //Abrimos la conexin } catch (SqlException ex) { MessageBox.Show("Error al tratar de establecer la conexin " + ex.Message); } } catch (SqlException ex) { MessageBox.Show("Error en la conexin: "+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 asignacin { 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) { //Instruccin 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 instruccin 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);

14

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 ejecucin { Comando.ExecuteNonQuery(); //Ejecutamos la instruccin 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 ejecucin { 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 ejecucin { Comando.ExecuteNonQuery(); MessageBox.Show("Registro eliminado");

15

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 cdigo fuente del ejemplo: http://cid-409e17cc56f28a81.skydrive.live.com/self.aspx/.Public/Punto%20Net/ApliacacionADO.net.zip Referencias bibliogrficas: http://msdn.microsoft.com/es-es/library/e80y5yhx(VS.80).aspx

16

You might also like