Tutorial desde 0: Ejemplo básico de Acceso a datos usando ADO.Net

Como dice el titulo del articulo “Desde 0”, si eres una persona con conocimientos avanzados sobre el tema, no te recomiendo leer los artículos que dicen desde “Cero”, ¿por que?, son para principiantes, personas que apenas se están iniciando en el mundo de la programación o personas avanzadas que necesiten aclarar alguna duda o simplemente mirar alternativas de solución a algún problema en particular, ¿y por que escribes cosas tan básicas? muchos en nuestros inicios, comenzamos a buscar artículos como estos (básicos), aunque parecen tontos, son los que nos permiten entender el funcionamiento del lenguaje y finalmente aprender algo nuevo para luego, “si” introducirnos a un nivel mas profundo, mucha gente que escribe en internet supone que todo el que lee sus artículos ya es un gurú, desconociendo la realidad de muchas personas que se están iniciando en esto.

Explicación

Abrimos Visual Studio 2005/2008

clip_image002

Creamos un nuevo proyecto

clip_image004

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

clip_image006

clip_image008

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

clip_image010

clip_image012

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

clip_image014

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

clip_image016

Creamos el siguiente menú:

clip_image018

Creamos el formulario estudiantes, haciendo clic derecho en el proyecto, desde el explorador de objetos como se muestra en la siguiente imagen:

clip_image020

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

clip_image022

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
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
text Buscar
button8 name btnEliminar
text Eliminar
button9 name btnCerrar
text Cerrar

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

clip_image024

Código fuente del formulario:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

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

//Variable de tipo String para almacenar el nombre de la Instancia SQLServer

String Servidor = @”(local)\SQLEXPRESS”;

//Variable de tipo String para almacenar el nombre de la base de datos

String Base_Datos = “bd2010”;

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

//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 método recibe como parámetro un índice 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);

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 excepciones 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 excepciones en ejecución

{

Comando.ExecuteNonQuery();

MessageBox.Show(“Registro eliminado”);

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

Publicado el 17 febrero 2010 en C#. Añade a favoritos el enlace permanente. 8 comentarios.

  1. Amigo Simplemente no me queda tu proyecto…
    Mi rollo es que qeuireo hcer una opcion buscar a partir de una caja de texto. y la funcion no me sale…

  2. tengo muchas dudas men. primera me baje el proyecto, bien como hago lo abro en c# y me aparee un error, como cargo la base de datos y en donde en c# o en sql server management y como lohago si me aparece es un archivo con la extension .sql y me pide es una extension .mdf ayudaaaaaaa

    • En el sql management studio le dices abrir al archivo bd20101.sql y seleccionas con el ratos desde donde dice “– Creating Database “bd2010”, hasta el contenido de “– Data from table “dbo.estudiantes”” es decir los insert into ….. tambien. y luego actualizas la base de datos y aparecerá la base de datos creada.

    • Corrijo: En el sql management studio le dices abrir al archivo bd20101.sql y seleccionas con el ratos desde donde dice “– Creating Database “bd2010″, hasta el contenido de “– Data from table “dbo.estudiantes”” es decir los insert into ….. tambien. y luego das click en el botón !Ejecutar y después actualizas la base de datos y aparecerá la base de datos creada.

  3. Armando Ollarves

    ¡Muy bueno y muy completo! Te lo agradezco! ¡Me sirvió de mucho!

  4. Genial gracias por publicar el codigo.

  5. Hola necesito sacarme una duda cundo tengo una herencia la declaro en el programa principal nada mas y para que los sirve métodos de la clase List: Find, FindAll, Sort
    gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: