Вы находитесь на странице: 1из 22

Introduccin a .

NET y C#
Acceso a Datos

Agenda

Introduccin a ADO.NET Acceso a Datos manual

Acceso a datos con Visual Studio 2010

01/03/2014

Introduccin a ADO.NET
ADO.NET es un conjunto de clases relacionadas entre s que estn especializadas en ofrecer toda la funcionalidad que un programador necesita para realizar acceso a datos y manejarlos una vez que los ha obtenido. Alto nivel de abstraccin, lo que permite olvidarnos de los detalles de bajo nivel de las bases de datos. Es una tecnologa interoperativa: aparte del almacenamiento y recuperacin de datos, introduce la posibilidad de integrarse con el estndar XML. Proporciona un conjunto de clases de carcter armnico, funcionan de igual forma con la capa inferior que es la que corresponde a los proveedores de acceso a datos. Facilita el trabajo en n-capas y la posible migracin de una fuente de datos a otra.

01/03/2014

Introduccin a ADO.NET

01/03/2014

Introduccin a ADO.NET
System.Data
La clase DataSet Es una representacin de datos residente en memoria que proporciona un modelo de programacin relacional coherente independientemente del origen de datos que contiene. Contiene un conjunto de datos que han sido volcados desde el proveedor de datos. La clase DataView Permite crear mltiples vistas de nuestros datos, adems de permitirnos presentar los datos. Representa los datos de la clase DataTable, permitindonos editar, ordenar y filtrar, buscar y navegar por un conjunto de datos determinado. La clase DataTable Representa una determinada tabla en memoria, de modo que podamos interactuar con ella.
Nota: Existen casos en los que no es recomendable almacenar en memoria (DataSet) todos los resultados de una consulta, bien por ser muchos registros o por contener datos muy grandes. En este tipo de casos se puede usar u objeto DataReader directamente para leer la informacin, tratarla y no almacenarla en lugar alguno. De todos modos lo ms frecuente es realizar el proceso descrito.

01/03/2014

Introduccin a ADO.NET
Proveedores de acceso a datos
.NET Framework proporciona un conjunto de proveedores ODBC .NET Data Provider (System.Data.Odbc) Permite conectar nuestras aplicaciones a fuentes de datos a travs de ODBC. OLE DB .NET Data Provider (System.Data.OleDb) Realiza la conexin utilizando un proveedor OLEDB, al igual que el ADO clsico. Oracle Client .NET Data Provider (System.Data.OracleClient) Proveedor de datos para acceder a Oracle. SQL Server .NET Data Provider (System.Data.SqlClient) Permite la conexin optimizada a SQL Server 7.0 o posterior, incluyendo la ltima versin SQL Server Express Edition.

01/03/2014

Introduccin a ADO.NET
Cada uno de estos posee las clases:

Connection: establece una conexin fsica con una

base de datos determinada.


Command: representa una determinada sentencia

SQL o un Stored Procedure.


DataAdapter: establece una comunicacin entre una

fuente de datos y un DataSet.


DataReader: accede a los datos de una manera muy

rpida.

01/03/2014

Introduccin a ADO.NET
DataAdapter
Est implementada por cada proveedor de un modo diferente. Sabe cmo manejar correctamente los objetos proporcionados por su proveedor especfico (fundamentalmente los vistos: Connection, Command y DataReader). Proporciona mtodos para transferir informacin desde el servidor a DataSets desconectados y viceversa haciendo uso de dichos objetos especficos del proveedor.
Por ejemplo, el mtodo Fill de un DataSet se utiliza para introducir los resultados de una consulta dentro de un DataSet para luego trabajar con ellos sin preocuparnos de su origen. Del mismo modo su mtodo Update se utiliza para conciliar automticamente con el origen de datos los datos modificados en un DataSet mientras no haba conexin.

01/03/2014

Introduccin a ADO.NET
Otras clases dependientes de DataSet

DataTable: representa una tabla o relacin de datos. Se puede asimilar a una tabla de un gestor de datos. Los datos obtenidos de una consulta de tipo SELECT de SQL se almacenan en un objeto de esta clase.
DataColumn: ofrece informacin sobre cada uno de los campos de los registros almacenados en un DataTable, como su nombre o su tipo. DataRow: representa un registro de la tabla virtual definida por el DataTable. Contiene tantos elementos como campos tiene la tabla, cada uno del tipo definido por el objeto DataColumn correspondiente. Constraint: las clases Constraint se emplean para definir restricciones en los tipos de datos contenidos en un DataTable. DataRelations: define la relacin existente entre dos objetos DataTable. Normalmente se suelen utilizar un identificador comn a ambas tablas aunque pueden ser combinaciones de ms de uno de ellos. De este modo se sabe cmo obtener informacin de una tabla a partir de informacin en otra. DataView: representa una vista concreta de un DataTable. Normalmente se trata de ordenaciones o filtros sobre los datos originales. Todas las tablas disponen de una vista por defecto (propiedad DefaultView) que ofrece los datos tal y como se han introducido en sta y es la vista que se usa habitualmente.

01/03/2014

Acceso a Datos manual


SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=SQL; Initial Catalog=Northwind; Integrated Security=True"; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Customers"; cmd.Connection = cn; cn.Open(); SqlDataReader dr = new SqlDataReader(); dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { console.WriteLine(dr().toString()); } } cn.Close();

01/03/2014

10

Acceso a Datos manual


La clase Command dispone de diversos mtodos para ejecutar consultas:

ExecuteReader: este mtodo lanza la consulta a la base de datos y devuelve una referencia a una instancia de la clase DataReader. Podemos utilizar el DataReader para recorrer los datos y procesarlos.
ExecuteNonQuery: ejecuta la consulta sin devolver resultado alguno. Simplemente enva la consulta al servidor y devuelve el nmero de registros afectados por sta. til para realizar consultas de insercin (INSERT), actualizacin (UPDATE) y borrado (DELETE). ExecuteScalar: lanza la consulta y devuelve un objeto con el valor del primer campo del primer registro que se obtenga de dicha consulta. Es til para lanzar consultas de agregacin como sumas (SUM), cuentas (SELECT COUNT * ....) y similares de las que slo necesitamos un valor como resultado.

01/03/2014

11

Acceso a Datos manual


DataAdapter
public DataSet GetClientes() { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=SQL; Initial Catalog=Northwind; Integrated Security=True; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Customers"; cmd.Connection = cn; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); return ds; }

01/03/2014

12

Acceso a Datos manual


Consultas parametrizadas
SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Customers WHERE Country = " + pais + " ";

La forma correcta de realizar este tipo de consultas es utilizar parmetros en la consulta. Los objetos de tipo Command disponen de una coleccin llamada Parameters que sirve para asignar dichos parmetros. stos previamente se definen en la consulta utilizando comodines que marquen su ubicacin.
SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SELECT * FROM Customers WHERE Country = @Pais"; cmd.Parameters.Add("@Pais", SqlDbType.NVarChar); cmd.Parameters("@Pais").Value = pais;

01/03/2014

13

Acceso a Datos manual


INSERT
public bool CreateCliente (string company, string address, string phone) { SqlConnection cn = new SqlConnection(); cn.ConnectionString = "Data Source=SQL; Initial Catalog=Northwind; Integrated Security=True"; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "INSERT INTO Customers (CompanyName, Address, Phone)" + " VALUES (@Company, @Addr @Phone)"; cmd.Parameters.AddWithValue("@Company", company); cmd.Parameters.AddWithValue("@Addr", address); cmd.Parameters.AddWithValue("@Phone", phone); cmd.Connection = cn; int result; using cn { cn.Open(); result = cmd.ExecuteNonQuery(); } return result > 0; }

01/03/2014

14

Acceso a Datos manual


INSERT desconectado
DataRow dr = ds.Tables[0].NewRow(); dr("CustomerID") = "JUAN"; dr("CompanyName") = "Juan Prez"; dr("Address") = "San Martn 567"; ds.Tables[0].Add(dr);

UPDATE desconectado
ds.Tables[0].Rows[4]["Address"] = "Nueva direccin";

DELETE desconectado
ds.Tables[0].Rows[4].Delete();

01/03/2014

15

Acceso a Datos manual


Command
Debemos realizar una sincronizacin entre la representacin en memoria de los datos y su ubicacin fsica real, para lo cual debemos hacer que los cambios trasciendan a la capa conectada. Al igual que utilizbamos la propiedad SelectCommand para indicar cmo se recuperaban los datos hacia un DataSet, ahora debemos utilizar las propiedades InsertCommand, UpdateCommand y DeleteCommand para indicar qu comandos se deben usar para agregar, modificar y eliminar los registros modificados en memoria a travs del DataSet. Una vez especificados estos comandos slo resta llamar al mtodo Update del DataAdapter para que se ocupe de sincronizar automticamente todos los cambios que hayamos realizado en las tablas en memoria.

SqlCommand cmdDelete = new SqlCommand(); cmdDelete.CommandText = "DELETE FROM Customers WHERE CustomerID = @ID"; cmdDelete.Parameters.AddWithValue("@ID", customerID); da.DeleteCommand = cmdDelete;

01/03/2014

16

Acceso a Datos manual


Pros Es adecuado si no necesitamos almacenar los resultados de la consulta en memoria ni regresar sobre ellos una vez procesados. Es muy til para obtener resultados con miles o millones de registros que queremos tratar secuencialmente pero no almacenar en memoria. Contras Es un poco complicado y el uso de los DataReader es algo limitado (de slo lectura y hacia adelante). Para un uso cotidiano se trata de un cdigo muy poco til y complicado de utilizar, salvo para cosas muy sencillas.

01/03/2014

17

Acceso a datos con Visual Studio 2010


Orgenes de datos :

SqlDataSource: Enlaza con cualquier base de datos para que exista un proveedor de ADO.NET. AccessDataSource: Esta especializado en trabajar con bases de datos Microsoft Access. ObjectDataSource: Se enlaza con objetos de negocio y capas personalizadas de acceso a datos. XmlDataSource: Trata datos contenidos en documentos XML. SiteMapDataSource: Se enlaza con la jerarqua de clases expuesta por el modelo de navegacin de sitios de ASP.NET.

01/03/2014

18

Acceso a datos con Visual Studio 2010


Concurrencia optimista Durante la configuracin de un origen de datos una de las opciones avanzadas que se presenta habla de la Concurrencia optimista. La concurrencia optimista evita la actualizacin de registros en el caso de que haya variado cualquiera de sus campos desde que se obtuvieron de la fuente de datos.
DELETE FROM [Customers] WHERE [CustomerID] = @original_CustomerID AND [CompanyName] = @original_CompanyName AND [ContactName] = @original_ContactName AND [ContactTitle] = @original_ContactTitle AND [Address] = @original_Address AND [City] = @original_City AND [Region] = @original_Region AND [PostalCode] = @original_PostalCode AND [Country] = @original_Country AND [Phone] = @original_Phone AND [Fax] = @original_Fax

Concurrencia pesimista
DELETE FROM [Customers] WHERE [CustomerID] = @original_CustomerID

01/03/2014

19

Acceso a datos con Visual Studio 2010


DataSet tipados La clase DataSet puede ser extendida mediante herencia para aadirle nuevas funcionalidades y aprovechar las ya existentes. Si creamos una nueva clase que herede de DataSet y sta la especializamos en el tratamiento de un conjunto de datos determinado que conocemos de antemano nos encontramos un DataSet especializado. Podemos crear un DataSet especial que tenga en cuenta las particularidades de los datos que maneja para validarlos antes de permitir su insercin, que verifique las relaciones con otros datos o que los transforme o controle el acceso a los mismos. Visual Studio nos permite crear este tipo de DataSet de forma visual y usando asistentes. Para agregar un DataSet tipado a nuestro proyecto slo hay que presionar con el botn secundario sobre la carpeta App_Code y en el dilogo que aparece elegir el icono de DataSet. La extensin del archivo generado es '.xsd' porque lo que en realidad albergan es un esquema XML que define la estructura de los datos en los que se van a especializar.

01/03/2014

20

Acceso a datos con Visual Studio 2010


DataSet tipados Este asistente nos permite configurar un objeto TableAdapter que se encargar de trasegar datos entre el DataSet tipado que estamos creando y la base de datos. Un TableAdapter es una clase que encapsula a un DataAdapter especializado en los datos que vamos a procesar con la tabla del DataSet tipado que estamos definiendo.

Con l dispondremos de mtodos para recuperar informacin, crear nuevos registros, actualizarlos y eliminarlos, slo que los correspondientes comandos estarn creados de manera automtica o asistindonos en ello. As, por defecto, se definen un par de mtodos para obtener los datos subyacentes rellenando un DataSet que se le pase (mtodo Fill) o devolviendo directamente un DataTable (mtodo GetData). Adems el mtodo Update sirve para conciliar automticamente los cambios del un DataSet tipado con la base de datos original.

01/03/2014

21

Fin Mdulo

01/03/2014

22

Вам также может понравиться