0% encontró este documento útil (0 votos)
170 vistas7 páginas

+ Entity Framework

ADO.NET es una tecnología de acceso a datos para .NET que ofrece una arquitectura más simple que OLEDB/ADO. Se basa en proveedores de datos como SqlClient y OleDb que permiten conectarse y manipular datos de forma independiente del lenguaje de programación. Los principales componentes de ADO.NET son DataSet para almacenar datos y Connection, Command, DataReader y DataAdapter para interactuar con bases de datos.

Cargado por

Balb
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
170 vistas7 páginas

+ Entity Framework

ADO.NET es una tecnología de acceso a datos para .NET que ofrece una arquitectura más simple que OLEDB/ADO. Se basa en proveedores de datos como SqlClient y OleDb que permiten conectarse y manipular datos de forma independiente del lenguaje de programación. Los principales componentes de ADO.NET son DataSet para almacenar datos y Connection, Command, DataReader y DataAdapter para interactuar con bases de datos.

Cargado por

Balb
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

ADO.

NET

La tecnología ADO.NET -en la versión beta 1 se llamaba ADO+- es un modelo de proveedor más
sencillo que el par OLEDB / ADO y se integra perfectamente con XML. ADO.NET es la evolución de
ADO en la nueva plataforma .NET.
Las principales características de ADO.NET son:
 Trabaja desconectado del origen de datos que se utilice.
 Tiene una fuerte integración con XML y ASP .NET.
 El uso de ADO.NET es independiente del lenguaje de programación que se utilice.
La tecnología ADO .NET esta basada en un nuevo modelo de componentes en la que las clases de
acceso a datos y las clases contenedores forman parte del marco de trabajo de .NET.

Arquitectura de ADO.NET

Namespaces
ADO .NET se basa en los siguientes espacios de nombres de accesos a datos:

 System.Data, que proporciona las clases de acceso a datos generales.


 System.Data.Common, que contiene las clases compartidas por los proveedores de datos.
 System.Data.OleDb, que almacena las clases del proveedor de datos OLE DB.
 System.Data.SqlClient, que expone las clases del proveedor de datos para SQL Server.

Proveedores de datos ADO.NET:


 SqlClient (System.Data.SqlClient)
 OleDb (System.Data.OleDb)
 Odbc (System.Data.Odbc)
 OracleClient (System.Data.OracleClient)
Los componentes de ADO.NET
Los componentes de ADO.NET han sido diseñados para acceder y manipular datos. Hay dos
componentes principales en ADO.NET que son DataSet y los proveedores de datos .NET que a su
vez incluyen los objetos Connection, Command, DataReader y DataAdapter. En este apartado se
describirá detalladamente cada uno de estos objetos.

La clase Connection
Es la clase encargada de establecer la conexión con el origen de datos y tiene soporte automático
para pooling de conexiones. Dependiendo del origen de datos que se utilice se deberá utilizar
OleDbConnection o SqlConnection. Se entiende por pool de conexiones el conjunto de conexiones
“cacheadas” en el servidor.

Esta clase implementa la interface IDbConnection. La cadena de conexión al origen de datos se


obtiene por medio de la propiedad ConnectionString, el estado de la conexión por medio de la
propiedad State, para la base de datos se utiliza Database y para determinar el tiempo máximo de
conexión la propiedad ConnectionTimeout.
Los métodos más importantes de esta clase son:

Open Cuando se llama al método Open, se abre un canal físico con


el origen de datos
Close Cierra la Conexión, pero ésta no se destruye facilitando el
pooling de conexiones. El consumo en memoria es bajo.

BeginTransaction Comienza la transacción


ChangeDatabase Cambia de base de datos
CreateCommand Crea un objeto Command

La siguiente tabla describe los estados en los que se puede encontrar la conexión.

Open La conexión está abierta y funcionando


Una conexión previa ha dejado de funcionar. Debe ser cerrada y
Broken
reabierta.
Closed Está cerrada.
Connecting Conectándose, la conexión está siendo abierta.
Executing Ejecutando un comando
Fetching Recogiendo la información del origen de datos.

El proveedor sólo puede cambiar la cadena de conexión cuando está cerrada (Closed). Por otro
lado, los desarrolladores deberían utilizar el método Close cuando hayan acabado de utilizar la
conexión, ya que este método cierra la conexión y la devuelve al pool de conexiones. Sin embargo
el método Dispose cierra la conexión y destruye la instancia del objeto eliminándola del pool de
conexiones.

En función del proveedor de datos de la plataforma .NET que se utilice, se puede elegir entre los
clases Connection siguientes: OleDbConnection y SqlConnection.
Clase OleDbConnection
Esta clase representa una conexión al proveedor de datos OLE DB .NET. Las propiedades más
importantes que utiliza son:
 ConnectionString para especificar el origen de datos
 ChangeDatabase para cambiar la base de datos para conexiones abiertas.
 ConnectionTimeout para obtener el tiempo de espera. Por defecto son 15 segundos. Si se
desea que sea ilimitado ha de asignársele el valor cero y sólo podrá cambiarse su valor a
través de la propiedad ConnectionString.
 Si el estado de la conexión cambia -propiedad State- entonces se produce el evento
StateChange.

Clase SqlConnection
Esta clase representa una conexión a la base de datos SQL Server 7.0 o superior. Las propiedades
más importantes son las siguientes:
 Si se produce una excepción en SQL (SqlException) mientras se ejecuta un comando
concreto, la conexión permanece abierta en caso de que el nivel de severidad sea menor
que 19. Con un nivel de severidad mayor que 20, la conexión se cierra y es necesario
reabrirla para continuar.
 La propiedad ConnectionString especifica el origen de datos.
 Un objeto SqlConnection lee la información de la conexión a través de la base de datos y
del origen de datos. No necesita leer información del proveedor como en el caso de OLE
DB .NET.
 La propiedad ConnectionTimeout obtiene el tiempo de espera que por defecto son 15
segundos. Si se desea que sea ilimitado ha de asignársele el valor cero y solo podrá
cambiarse su valor a través de la propiedad ConnectionString.
 Cuando se utiliza el método Close si existen transacciones pendientes en ese momento,
las deshace (RollBack).

Transacciones en ADO.NET

Para empezar una transacción en ADO .NET se llama al método BeginTransaction que acepta el
parámetro IsolationLevel (nivel de aislamiento) y/o el nombre, y devuelve un objeto transacción de
la clase OleDbTransaction o SqlTransaction dependiendo del proveedor que se utilice.

El objeto SqlTransaction soporta savepoints o puntos de almacenamiento de la transacción que


permiten deshacerla (RollBack) más tarde. Para almacenar un savepoint se utiliza el método Save.
Esta funcionalidad es equivalente a la declaración “SAVE TRANSACTION” que se realiza en T-SQL.

Si se quiere deshacer una transacción ya almacenada, ha de utilizarse el método Rollback que


puede llevar como parámetro el nombre del punto de almacenamiento previamente guardado. En
caso de querer aceptar la transacción se utilizará el método Commit.
A continuación se realiza un ejemplo con SQL Server:

String strConexion = “SERVER=(local); uid=sa; pwd=sa; database=Northwind”; SqlConnection


ObjCnn = new SqlConnection(strConexion);

ObjCnn.Open();
// Comienza la transacción SqlTransaction ObjTran = ObjCnn.BeginTransaction();

try
{
// Ejecución de comandos
// Se ejecuta el Commit de la Transacción
ObjTran.Commit();
}

catch (Exception ex)


{
// La transacción ha fallado
ObjTran.Rollback();
}
ObjCnn.Close();

A continuación se realiza un ejemplo con OLE DB.

String strConexion = ("Provider = Microsoft.Jet.OLEDB.4.0;Data Source =


Neptuno.MDB";
OleDbConnection ObjCnnOLE= new OleDbConnection(strConexion);

ObjCnn.Open();
// Comienza la transacción
OleDbTransaction ObjTran = ObjCnnOLE.BeginTransaction();
try
{
// Ejecución de comandos
// Se ejecuta el Commit de la Transacción
ObjTran.Commit();
}
catch (Exception ex)
{
// La transacción ha fallado
ObjTran.Rollback();
}
ObjCnnOLE.Close();
La clase Command
Un objeto de la clase Command al igual que un objeto de la clase Connection pertenece al
proveedor de acceso a datos de la plataforma .NET, así que a la hora de codificar se puede utilizar
la interfaz ICommand común a todos los proveedores (todos ellos la implementan), o las clases
específicas de alguno de los proveedores que proporciona la plataforma .NET.

Cuando se está utilizando un objeto Command se necesita que un objeto Connection haya sido
abierto. Siempre hay una transacción asociada a la conexión. Si se “resetea” la conexión entonces
el objeto transacción devuelve null. En principio, se puede cambiar la conexión sin problema
alguno para conectar con otro usuario o para conectar a otra fuente de datos, pero hay que tener
en cuenta que la transacción que subyace sea compatible con la conexión.

Para ejecutar un comando se necesita que haya una conexión válida abierta y dependiendo del
comportamiento que se desee dar al objeto Command se utilizará uno de los siguientes métodos:
 ExecuteNonQuery: No devuelve un conjunto de registros sino que devuelve el número de
filas afectadas por la acción.
 ExecuteReader: Devuelve un conjunto de registros de sólo lectura y “forward-only”. No se
informa del número de filas afectadas.
 ExecuteScalar: Devuelve sólo el valor de la celda (0,0) del conjunto de registros.

Ejemplo
using (SqlConnection connection = new SqlConnection(connectionString))
{
// Create the Command and Parameter objects.
SqlCommand command = new SqlCommand(queryString, connection);
// command.Parameters.AddWithValue("@pricePoint", paramValue);

// Open the connection in a try/catch block.


// Create and execute the DataReader, writing the result
// set to the console window.
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}\t{2}",
reader[0], reader[1], reader[2]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
ADO.NET ENTITY FRAMEWORK

Es un ORM del conjunto de tecnologías de ADO.NET la que nos permite utilziar Orientación a
Objetos para almacenar información (Creas objetos de la clase y se guarda directamente en tablas
de BD sin escribir ningún query de SQL).

Ejemplo en clase:
Var contexto = new xxxxEntities();
Var alumnos = contexto.Alumnos.Where(a=>a.nombre.Startwith(“a”)).ToList())

Ejemplo:

using System;
using System.Collections.Generic;
using System.Data.Entity;

namespace Models
{
public class TiendaContext : DbContext
{
public DbSet<Cliente> Clientes { get; set; }
public DbSet<Producto> Productos { get; set; }
public DbSet<Pedido> Pedidos { get; set; }
public DbSet<LineaPedido> LineasPedido { get; set; }
}

public class Cliente


{
// Comentar si ProxyCreationEnabled = true
public Cliente()
{
Pedidos = new Collection<Pedido>();
}
public virtual int ClienteId { get; set; }
public virtual string Nombre { get; set; }
public virtual ICollection<Pedido> Pedidos { get; set; }
}

public class Producto


{
// Comentar si ProxyCreationEnabled = true
public Producto()
{
Lineas = new Collection<LineaPedido>();
}
public virtual int ProductoId { get; set; }
public virtual string Descripcion { get; set; }
public virtual decimal Precio { get; set; }
public virtual ICollection<LineaPedido> Lineas { get; set; }
}

public class Pedido


{
// Comentar si ProxyCreationEnabled = true
public Pedido()
{
Lineas = new Collection<LineaPedido>();
}
public virtual int PedidoId { get; set; }
public virtual DateTime FechaCreacion { get; set; }
public virtual int ClienteId { get; set; }
public virtual Cliente Cliente { get; set; }
public virtual ICollection<LineaPedido> Lineas { get; set; }
}

public class LineaPedido


{
public virtual int LineaPedidoId { get; set; }
public virtual int PedidoId { get; set; }
public virtual int ProductoId { get; set; }
public virtual int Unidades { get; set; }
public virtual Pedido Pedido { get; set; }
public virtual Producto Producto { get; set; }
}
}

using (var context = new TiendaContext())


{
var cliente = new Cliente() { Nombre = "Sergio" };
context.Clientes.Add(cliente);
context.SaveChanges();
}

También podría gustarte