Upload
melvin-mieses-antigua
View
77
Download
4
Tags:
Embed Size (px)
Citation preview
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.
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:
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...”
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:
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:
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”
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
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
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
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ú:
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
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
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
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);
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");
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