Modelos de Almacenamiento de Datos C#
Modelos de Almacenamiento de Datos C#
Modelos de Almacenamiento de Datos C#
System.Data
Las clases del nombre de espacio System.Data son bastantes extensas y variadas. Quizs las
clases ms importantes son la clase DataView, la clase DataSet y la clase DataTable.
La clase DataSet
El DataSet es una representacin de datos residente en memoria que proporciona una modelo de
programacin relacional coherente independientemente del origen de datos que contiene. El
DataSet contiene en s, un conjunto de datos que han sido volcados desde el proveedor de datos.
Debemos tener en cuenta que cuando trabajamos con DataSets, el origen de datos no es lo ms
importante, ya que ste, puede ser cualquier tipo de origen de datos. No tiene porqu ser una
base de datos.
Un DataSet contiene colecciones de DataTables y DataRelations. El DataTable contiene una
tabla o tablas, mientras que la DataRelation contiene las relaciones entre las DataTables. Sin
embargo, no es necesario especificar todo esto hasta el ltimo detalle como veremos ms
adelante.
La clase DataView
Este objeto nos permite crear mltiples vistas de nuestros datos, adems de permitirnos
presentar los datos.
Es la clase que nos permite representar los datos de la clase DataTable, permitindonos editar,
ordenar y filtrar, buscar y navegar por un conjunto de datos determinado.
La clase DataTable
Este objeto nos permite representar una determinada tabla en memoria, de modo que podamos
interactuar con ella.
A la hora de trabajar con este objeto, debemos tener en cuenta el nombre con el cul definamos
una determinada tabla, ya que los objetos declarados en en el DataTable es sensitivo a
maysculas y minsculas.
En este conjunto de nombres de espacio, encontraremos casi siempre las clases Connection,
Command, DataAdapter y DataReader como las clases ms generales, las cuales nos
permiten establecer la conexin con la fuente de datos.
Estos proveedores de acceso a datos incluidos en Microsoft .NET Framework, los podemos
encontrar en los nombres de espacio:
System.Data.Odbc
System.Data.OleDb
System.Data.OracleClient
System.Data.SqlClient
El proveedor ODBC .NET permite conectar nuestras aplicaciones a fuentes de datos a travs de
ODBC.
El proveedor OLE DB .NET permite conectar nuestras aplicaciones a fuentes de datos a travs
de OLE DB.
El proveedor Oracle Client .NET es un proveedor de acceso a datos especialmente diseado
para bases de datos Oracle.
Por ltimo, el proveedor SQL Server .NET es un proveedor de acceso a datos nativo, que nos
permite conectar nuestras aplicaciones a fuentes de datos Microsoft SQL Server 7 o posterior.
Se trata de un proveedor especfico para bases de datos Microsoft SQL Server 7.0, Microsoft
SQL Server 2000 y Microsoft SQL Server 2005.
Nota
Consejo: Siempre que pueda, utilice para acceder a fuentes de datos, un proveedor de acceso a
datos nativo. Esto le permitir aumentar considerablemente el rendimiento a la hora de
establecer la conexin con una determinada fuente de datos
Los proveedores de acceso a datos que distribuye Microsoft en ADO.NET y algunos
desarrollados por otras empresas o terceros, contienen los mismos objetos, aunque los nombres
de stos, sus propiedades y mtodos, pueden ser diferentes. Ms adelante veremos algn
ejemplo, y observar en la prctica cules son estas diferencias ms destacables.
El objeto Connection
Este objeto es el encargado de establecer una conexin fsica con una base de datos
determinada. Para establecer la conexin con una determinada fuente de datos, no slo debemos
establecer la cadena de conexin correctamente, sino que adems deberemos usar los
parmetros de conexin y el proveedor de acceso a datos adecuado. Con este objeto, podremos
adems abrir y cerrar una conexin.
El objeto Command
Este objeto es el que representa una determinada sentencia SQL o un Stored Procedure.
Aunque no es obligatorio su uso, en caso de necesitarlo, lo utilizaremos conjuntamente
con el objeto DataAdapter que es el encargado de ejecutar la instruccin indicada.
El objeto DataAdapter
Este objeto es quizs el objeto ms complejo y a la vez complicado de todos los que forman
parte de un proveedor de acceso a datos en .NET. Cuando deseamos establecer una
comunicacin entre una fuente de datos y un DataSet, utilizamos como intermediario a un
objeto DataAdapter. A su vez, un DataAdapter contiene 4 objetos que debemos conocer:
El objeto DataReader
Este objeto es el utilizado en una sola direccin de datos.
El paradigma de la conexin
El paradigma de la conexin
Cuando abordamos un proyecto de acceso a fuentes de datos, siempre nos encontramos
con una duda existencial. Debemos crear una conexin con la base de datos al
principio de nuestra aplicacin y cerrarla cuando la aplicacin se cierre?, o debemos
crear una conexin con la base de datos slo cuando vayamos a trabajar con la fuente de
datos?. Y si estamos trabajando continuamente con una fuente de datos?, cmo
penalizaran todas estas acciones?.
Es difcil de asumir que accin tomar en cada caso, y es que dependiendo de lo que
vayamos a realizar, a veces es ms efectiva una accin que otra, y en otras ocasiones, no
est del todo claro, ya que no existe en s una regla clara que especifique qu accin
tomar en un momento dado.
Lo que s est claro es que el modelo de datos de ADO.NET que hemos visto, quedara
resumido en cuanto a la conectividad de la manera en la que se representa en la figura 1.
Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a
ella. El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con
fuentes de datos conectadas.
Por otro lado, el objeto DataReader tiene algunas particularidades que conviene conocer
y que veremos a continuacin.
Conociendo el objeto DataReader
DataReader es rpido
Debido a su naturaleza y caractersticas, este objeto es bastante rpido a la hora de
trabajar con datos.
Como es lgico, consume adems menos memoria y recursos que un objeto DataSet por
ejemplo.
Sin embargo, dependiendo de las necesidades con las que nos encontremos, puede que
este mtodo de acceso y trabajo no sea el ms idneo.
Connection
Command
DataReader
Luego de haber creado nuestras tablas es necesario que creemos un formulario para
tener acceso a los datos de la tabla, debemos tener una caja de texto para cada tabla, la
tabla que vamos a utilizar es la tabla Alumnos, ms o menos as:
El cdigo es el siguiente:
Ahora bien has doble sobre el fondo del formulario lo cual te llevar al espacio del nombre del
formulario, escribe el siguiente cdigo que servir para el enlace a la base de datos y a la tabla
que hemos creado previamente.
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class prueba : Form
{
private string strconexion;
private SqlConnection bases;
private SqlDataAdapter ada;
private DataSet tabla = new DataSet();
private DataRow r;
private int i=0;
private SqlCommand cmd;
public void IniciarConexion(string DataBase)
{
SqlDataReader ada = null;
SqlConnection bases = null;
SqlCommand cmd = null;
}
public prueba()
{
InitializeComponent();
}
private void prueba_Load(object sender, EventArgs e)
{
bases = new SqlConnection("Data Source=ALMANZAPC\SQLEXPRESS;Initial Catalog=prueba;Integrated Security=True");
bases.Open();
ada= new SqlDataAdapter ("SELECT * FROM
prueba",bases);
bases.Close();
ada.Fill(tabla, "prueba");
r = tabla.Tables("prueba").Rows(i);
textBox1.Text = r("id");
textBox2.Text = r("nombre");
textBox3.Text = r("edad");
textBox4.Text = r("direccion");
}
Private Sub bprimero_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bprimero.Click
{
i = 0
r = tabla.Tables("alumnos").Rows(i);
txtid.Text = r("carnet");
txtnombre.Text = r("nombre");
txtapellido.Text = r("apellido");
txtedad.Text = r("edad");
txtdir.Text = r("direccion");
}
Private Sub bultimo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bultimo.Click
{
i = tabla.Tables("alumnos").Rows.Count 1;
r =tabla.Tables("alumnos").Rows(i);
txtid.Text = Me.r("carnet");
txtnombre.Text = r("nombre");
txtapellido.Text =r("apellido");
txtedad.Text = r("edad");
txtdir.Text = r("direccion");
}
Private Sub bagregar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bagregar.Click
{
txtid.Text = "";
txtnombre.Text="";
txtapellido.Text ="";
txtedad.Text ="";
txtdir.Text ="";
}