0% encontró este documento útil (0 votos)
16 vistas27 páginas

Introducción a ADO.NET y Acceso a Datos

Este documento introduce ADO.NET y sus principales componentes para el acceso a datos. Explica que ADO.NET permite acceder a sistemas de bases de datos y otras fuentes de datos desde aplicaciones .NET. Describe los objetos clave como DbConnection, DbCommand y DbDataAdapter, y cómo interactúan proveedores de datos específicos como SqlClient y OleDb para proporcionar acceso a datos.

Cargado por

jopehi
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
16 vistas27 páginas

Introducción a ADO.NET y Acceso a Datos

Este documento introduce ADO.NET y sus principales componentes para el acceso a datos. Explica que ADO.NET permite acceder a sistemas de bases de datos y otras fuentes de datos desde aplicaciones .NET. Describe los objetos clave como DbConnection, DbCommand y DbDataAdapter, y cómo interactúan proveedores de datos específicos como SqlClient y OleDb para proporcionar acceso a datos.

Cargado por

jopehi
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Acceso a Datos ADO.

NET
Integracin de Sistemas
Diseo e implementacin con .NET

Introduccin a [Link]
[Link] es el modelo de acceso a datos para las aplicaciones basadas en .NET Se puede utilizar para acceder a sistemas de base de datos relacionales. Ejemplos:
SQL Server, Oracle, etc. Muchas otras fuentes de datos (para las cuales existe un proveedor OLE DB u ODBC)

Soporte intrnseco para XML Programacin Orientada a Componentes

[Link]
Evolucin histrica ODBC (Open DataBase Connectivity)
Interoperatibilidad con amplio rango de SGBD API acceso ampliamente aceptada Usa SQL como lenguaje de acceso a datos

DAO (Data Access Objects)


Interfaz de programacin para bases de datos JET/ISAM (e.g. MS Access)

[Link]
Evolucin histrica RDO (Remote Data Objects)
Estrechamente ligado a ODBC Orientado a aplicaciones cliente/servidor

OLE DB (Object Linking and Embedding for Databases)


No restringrido a acceso a datos relacionales
No limitado a SQL como lenguaje de recuperacin de datos

Tecnologa desarrollada por Microsoft


Construido sobre COM (Component Object Model)

Proporciona una interfaz a bajo nivel en C++

[Link]
Evolucin histrica ADO (ActiveX Data Objects)
Ofrece una interfaz orientada a objetos Proporciona un modelo de programacin para OLE DB accesible desde lenguajes diferentes a C++ Diseado como modelo conectado, altamente acoplado
Indicado para arquitecturas cliente/servidor

No pensado para arquitecturas multicapa en entornos distribuidos Diseo no correctamente factorizado


Demasiadas maneras de hacer lo mismo Algunos objectos acaparan demasiada funcionalidad

[Link]
Qu es [Link]? Coleccin de clases, interfaces, estructuras y enumeraciones que permiten acceder a diversas fuentes de datos (BD, XML, etc.) desde la plataforma .NET
Organizada en namespaces:
[Link] [Link] [Link] [Link] Etc.

Evolucin de ADO
No comparte con ste su jerarqua de clases S comparte su funcionalidad Usa internamente XML

[Link]
Arquitectura Framework .NET

VB

C++

C#

J#

Common Language Specification [Link] Windows Forms

[Link] y XML Base Class Library Common Language Runtime Windows COM+ Services

[Link]
Conceptos Bsicos y Arquitectura Modelo de objetos
Objetos de [Link] Proveedores de acceso a datos .NET

Jerarqua de espacio de nombres (namespace)


Organiza el modelo de objetos Incluye:
[Link] [Link] [Link] [Link] [Link]

[Link]
Proveedores de Acceso a Datos (Data Providers)
OLE DB .NET Data Provider OLE DB Provider

Otra BD

ODBC .NET Data Provider

ODBC Driver

Otra BD

Cliente
SQL .NET Data Provider SQL SERVER

Oracle .NET Data Provider

Oracle SERVER

[Link]
Proveedores de Acceso a Datos
Proporcionan un conjunto de clases que implementan una serie de interfaces comunes [Link]
OLE DB
Acceso va protocolo OLE DB a cualquier fuente de datos que lo soporte [Link]

ODBC
Acceso va protocolo ODBC a cualquier fuente de datos que lo soporte [Link]

SQL Server
Acceso nativo a MS SQL Server 7.0 o superior y MS Access [Link]

Oracle
Acceso nativo a Oracle Server [Link]

Otros provistos por terceros


MySQL, PostgreSQL, DB2, etc.

[Link]
Proveedores de Acceso a Datos
public static void ListProviders() { DataTable factoryTable = [Link](); foreach (DataRow dr in [Link]) { [Link]("Name: {0}", dr["Name"]); [Link]("Description: {0}", dr["Description"]); [Link]("InvariantName: {0}", dr["InvariantName"]); [Link]("AssemblyQualifiedName: {0}", dr["AssemblyQualifiedName"]); } } // Sample Output //Name: SqlClient Data Provider //Description: .Net Framework Data Provider for SqlServer //InvariantName: [Link] //AssemblyQualifiedName: [Link], // [Link], Version=[Link], Culture=neutral, // PublicKeyToken=b77a5c561934e089

[Link]
[Link] 2.0 API Independiente

Namespace [Link]
DbCommand DataAdapter DbParameter DbCommandBuilder DbDataAdapter DbConnection DbDataReader

DbParameterCollection DbTransaction DbException

DbProviderFactory DbProviderFactories

[Link]
Arquitectura

[Link]
Arquitectura
Base de Datos XxxConnection: maneja la conexin a una BD XxxCommand: ejecuta comandos contra una BD XxxDataAdapter: intercambia datos entre un DataSet y una BD DataSet: copia local de datos relacionales (Entorno Desconectado) XxxDataReader: Proporciona acceso a datos Read-only, Forward-only (Entorno Conectado) XxxDataReader

XxxConnection XxxCommand XxxDataAdapter

DataSet

[Link]
Entornos de Acceso a Datos
Conectado:
forward-only, read-only Aplicacin realiza una consulta y lee los datos conforme los va procesando Cursor unidireccional Objeto DataReader

Desconectado
La aplicacin ejecuta la consulta y almacena los resultados de la misma para procesarlos despus Minimiza el tiempo de conexin a la base de datos Objetos lightweight Objetos DataSet y DataAdapter

[Link]
Namespace [Link]

Contiene la base de [Link] Proporciona el modo de trabajo sobre datos


Clases y mtodos para la manipulacin de datos Posibilidad de creacin de vistas Representacin lgica de los datos Utilizacin de XML para visualizar, compartir y almacenar datos

[Link]
Namespace [Link] Acceso Independiente a Datos
[Link] [Link] [Link] [Link] [Link] [Link]

[Link]
DbConnection
Establece una sesin con una fuente de datos Implementada por SqlDbConnection,ODBCConnection, OleDbConnection, etc. Funcionalidad
Abrir y Cerrar conexiones Gestionar Transacciones

Usada conjuntamente con objetos DbCommand y DataAdapter Propiedades adicionales, mtodos y colecciones dependern de la implementacin especfica del proveedor

[Link]
DbConnection
Propiedades
ConnectionString ConnectionTimeOut DataBase State
Open Close

Mtodos
void Open() void Close() void ChangeDataBase(dbName); DbCommand CreateCommand()

[Link]
DbConnection. Connection String
Depender del proveedor de acceso a datos [Link] Ejemplos:
SqlServer:
"Data Source=localhost\SQLExpress; Initial Catalog=miniportal; User ID=user;Password=password"

MySQL ODBC Driver:


"DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; PORT=3306; UID=user; PWD=pwd; DATABASE=db;"

Access OLEDB:
"Provider=MSDASQL; Driver={Microsoft Access Driver (*.mdb)}; Dbq=drive:\path\[Link]; Uid=user; Pwd=pwd";

10

[Link]
Connection Pooling Pool de Conexiones habilitado automticamente
Pool se crea en base a la cadena de conexin Al cerrar una conexin, sta se devuelve al pool
SqlConnection conn = new SqlConnection(); [Link] = "Integrated Security=SSPI;Initial Catalog=northwind"; [Link](); // Pool A is created. SqlConnection conn = new SqlConnection(); [Link] = "Integrated Security=SSPI;Initial Catalog=pubs"; [Link](); // Pool B is created because the connection strings differ. SqlConnection conn = new SqlConnection(); [Link] = "Integrated Security=SSPI;Initial Catalog=northwind"; [Link](); // The connection string matches pool A.

[Link]
Ejemplo Creacin de Conexiones
using [Link]; using [Link]; <<...>> String connectionString = "DataSource=localhost\\SQLExpress;" + "Initial Catalog=miniportal;" + "UserID=user;Password=password"; SqlConnection connection = new SqlConnection(); [Link] = sqlConnectionString; [Link](); <<...>> [Link]();

11

[Link]
Providers Factory Independizar cdigo del proveedor de datos
Factora de proveedores : DbProviderFactories Crea instancias de la implementacin de un proveedor de las clases de origen de datos

Objeto DbProviderFactory
.CreateCommand() .CreateConnection() .CreateParameter()

[Link]
Providers Factory
String providerName = "[Link]"; String connectionString = "Data Source=localhost\\SQLExpress;" + "Initial Catalog=miniportal;" + "User ID=user;Password=password"; DbProviderFactory dbFactory = [Link](providerName); DbConnection connection = [Link](); [Link] = connectionString; DbCommand command = [Link](); [Link] = connection; [Link] = "Select * from users";

12

[Link]
DbCommand
Representa una sentencia que se enva a una fuente de datos
Generalmente, pero no necesariamente SQL

Implementada por SqlCommand, OleDbCommand, etc. Funcionalidad


Definir la sentencia a ejecutar Ejecutar la sentencia Enviar y recibir parmetros Crear una versin compilada

Propiedades adicionales, mtodos y colecciones dependern de la implementacin especfica del proveedor

[Link]
DbCommand Propiedades
CommandText CommandTimeOut CommandType
[Link] [Link]

Connection Parameters Transaction

13

[Link]
Comandos
Si se trabaja con comandos dependientes del Data Provider es posible disponer de varios constructores
SqlCommand() SqlCommand(cmdText) SqlCommand(cmdText, connection) SqlCommand(cmdText, connection, transaction)

SqlCommand command = new SqlCommand("SELECT loginName " + "FROM UserProfile ", connection);

[Link]
Comandos

Si se trabaja con comandos genricos (independientes del "Data Provider"), el comando debe crearse a partir de la conexin
nico constructor, sin parmetros Inicializacin mediante acceso a propiedades
// Create the command and set properties ... DbCommand command = [Link](); [Link] = "SELECT loginName " + "FROM UserProfile "; [Link] = connection; [Link] = 15; [Link] = [Link]; [Link]();

14

[Link]
Comandos Parametrizados Comandos poseen coleccin Parameters DbParameter
ParameterName DbType
Enumeracin: String, Int32, Date, Double, etc.

Value Size IsNullable

[Link]
Comandos Parametrizados
DbCommand command = [Link](); [Link] = "SELECT loginName FROM UserProfile " + "WHERE loginName = @loginName"; // Create and populate parameter DbParameter loginNameParam = [Link](); [Link] = "@loginName"; [Link] = [Link]; [Link] = "jsmith"; [Link](loginNameParam);

15

[Link]
Mecanismos de Acceso a Datos

DbCommand ExecuteReader ExecuteNonQuery ExecuteScalar

Entorno Conectado

DbDataAdapter DataSet

Entorno Desconectado

[Link]
Entorno Conectado. DbCommand ExecuteReader
Sentencias que devuelven mltiples filas de resultados (DbDataReader)

ExecuteNonQuery
Sentencias update, delete, etc. que no devuelven ninguna fila como resultado

ExecuteScalar
Sentencias SQL que devuelven una fila con un nico valor como resultado

16

[Link]
Entorno Conectado. DbDataReader Proporciona acceso secuencial de slo lectura a una fuente de datos Creado a travs de [Link]() Al utilizar un objeto DbDataReader, las operaciones sobre la conexin DbConnection quedan deshabilitadas hasta que se cierre el objeto DbDataReader

[Link]
DbDataReader
Propiedades de inters:
FieldCount: devuelve el nmero de campos en la fila actual RecordsAffected: nmero de registros afectados

Mtodos
Read()
Avanza el DbDataReader al siguiente registro Inicialmente se sita antes del primer registro del resultado Devuelve false si ha llegado al final, true en caso contrario

Close()
Cierra el objecto DbDataReader

GetValues()
Obtiene la fila actual

Proporciona mtodos para el tipado de los datos ledos (GetValue, GetString, etc.)
Boolean b = [Link](fieldNumber);

17

[Link]
DbDataReader
try { << ... >> // Create the command and set properties ... DbCommand command = [Link](); [Link] = "SELECT loginName, email " + "FROM UserProfile" ; [Link] = connection; [Link](); // Open the connection and execute the command ... [Link](); DbDataReader dr = [Link](); while ([Link]()) { String loginName = [Link](0); String email = [Link](1); [Link]("loginName: " + loginName + ", email: " + email); } // Close the DataReader ... [Link](); } catch (Exception e) { << ... >> } finally { // Ensures connection is closed if (connection != null) [Link](); }

[Link]
Entorno Conectado. ExecuteNonQuery
ExecuteNonQuery
<< ... >> // Create the command and set properties ... DbCommand command = [Link](); [Link] = "UPDATE Account " + "SET balance = 1.1 * balance "; [Link] = connection; [Link](); // Open the connection and execute the command ... [Link](); // Executes an SQL statement against the Connection object // of a .NET Framework data provider, and returns the // number of rows affected. int affectedRows = [Link](); [Link]("affectedRows: " + affectedRows); << ... >>

18

[Link]
Entorno Conectado. ExecuteScalar
ExecuteScalar
<< ... >> // Create the command and set properties ... DbCommand command = [Link](); [Link] = "SELECT count(*) " + "FROM UserProfile "; [Link] = connection; [Link](); // Open the connection and execute the command ... [Link](); // Executes the query, and returns the first column of the // first row in the resultset returned by the query. Extra // columns or rows are ignored. Int32 numberOfUsers = (Int32) [Link](); [Link]("numberOfUsers: " + numberOfUsers); << ... >>

[Link]
Transacciones
Transaccin:
Conjunto sentencias SQL que constituyen una unidad lgica de trabajo

Debe ajustarse a las propiedades ACID:


Atomicity:
Las sentencias se ejecutan todas o ninguna

Consistency:
Una vez finalizada, los datos deben ser consistentes

Isolation:
Transacciones se comporten como si cada una fuera la nica transaccin

Durability:
Una vez finalizada, los cambios son permanentes

19

[Link]
Transacciones Se crean a partir de la conexin
[Link]();

Es obligatorio asociar los comandos a la transaccin


Propiedad [Link]

Mtodos
Commit(); Rollback();

[Link]
Transacciones
Niveles de Aislamiento
[Link]: pueden ocurrir dirty reads, non-repeatable reads y phantom reads [Link]: pueden ocurrir non-repeatable reads y phantom reads [Link]: pueden ocurrir phantom reads" [Link]: elimina todos los problemas de concurrencia

El nivel de aislamiento se fija en el momento de crear la transaccin


[Link]( [Link]);

20

[Link]
Transacciones
try { // Get the connection ... << ... >> // Open the connection ... [Link](); // Starts a new transaction ... // transaction = [Link](); //default transaction = [Link]([Link]); // Create the command and set properties ... DbCommand selectCommand = [Link](); [Link] = connection; [Link] = "SELECT balance " + "FROM ACCOUNT " + "WHERE accId = 1"; // Associate the command with the transaction [Link] = transaction; [Link]();

[Link]
Transacciones
// Execute the selectCommand ... dataReader = [Link](); if (![Link]()) { throw new Exception("Error reading from Data Base"); } balance = [Link](0); [Link]("Current balance: " + balance); balance = 1.1 * balance; [Link]("New balance must be: " + balance); // PAUSE: another process could try to change the balance value in BD [Link](); // The DataReader must be closed before executing updateCommand!!! [Link](); // Create the updateCommand and set properties ... DbCommand updateCommand = [Link](); [Link] = connection; [Link] = "UPDATE ACCOUNT " + "SET balance = @balance " + "WHERE (accId = 1)";

21

[Link]
Transacciones
[Link] = transaction; [Link](); DbParameter balanceParam = [Link](); [Link] = "@balance"; [Link] = [Link]; [Link] = balance; [Link](balanceParam); // Execute the updateCommand ... int afectedRows = [Link](); [Link](); commited = true; [Link]("Transaction COMMITED"); } catch (DbException e) { [Link]([Link]); [Link]([Link]); } catch (Exception e) { [Link]([Link]); [Link]([Link]);

[Link]
Transacciones
} finally { if (!commited) { if (transaction != null) { [Link](); } } // Ensures connection is closed if ([Link]([Link])) { [Link](); } } }

22

[Link]
Excepciones
[Link]
Se lanza cuando ocurre algn problema en la capa de acceso a datos Es una clase abstracta que implementa ExternalException Cada "Data Provider" proporcionar una implementacin especfica

Constructores:
DbException() DbException(string message)
message: mensaje a mostrar

DbException(string message, Exception innerException)


innerException: la referencia de la excepcin interna

DbException(string message, int errorCode)


errorCode: cdigo de error para la excepcin

[Link]
Entorno Desconectado
Base de Datos XxxConnection: maneja la conexin a una BD XxxCommand: ejecuta comandos contra una BD XxxDataAdapter: intercambia datos entre un DataSet y una BD DataSet: copia local de datos relacionales (Entorno Desconectado) XxxDataReader: Proporciona acceso a datos Read-only, Forward-only (Entorno Conectado) XxxDataReader

XxxConnection XxxCommand XxxDataAdapter

DataSet

23

[Link]
Entorno Desconectado: DataSet
Ncleo [Link] bajo entorno desconectado Representacin en memoria del contenido de la base de datos Operaciones sobre los datos se realizan sobre el DataSet, no sobre el origen de datos Almacena
Tablas (DataTable) Relaciones ente tablas (DataRelation)

Independiente del proveedor de Datos Problemas


Sincronizacin datos Acceso Concurrente

[Link]
DataTable
Representacin lgica de una tabla de la base de datos Propiedades de inters:
Columns:
Coleccin de tipo ColumnsCollection de objetos DataColumn

Rows:
Coleccin de tipo RowsCollection de objectos DataRow

ParentRelations:
RelationsCollection. Relaciones en las que participa la tabla

Constraints:
Returns the tables ConstraintsCollection

DataSet:
DataSet en el que est incluida la DataTable

PrimaryKey:
DataColumn que acta como clave primaria de la tabla

24

[Link]
Entorno Desconectado: DataSet

DataSet

DataTable

DataColumn

DataRow

DataRelation

[Link]
Entorno Desconectado. SqlDataAdapter
Bridge entre origen de datos y DataSet Implementa los mtodos abstractos de la clase DataAdapter:
public abstract int Fill( DataSet dataSet ); public abstract int Update( DataSet dataSet );

Propiedades de inters:
DeleteCommand: El comando de borrado, expresado en SQL InsertCommand: Obtiene o establece el comando de insercin SelectCommand: Obtiene o establece el comando de seleccin UpdateCommand: Obtiene o establece el comando de actualizacin TableMappings: Relaciona la tabla con el DataTable

Debe especificarse siempre un comando de seleccin

25

[Link]
Entorno Desconectado
Fill

DataAdapter
SelectCommand InsertCommand UpdateCommand DeleteCommand Update

DataSet
Errors Collection

Command Connection Data Source

Parameters

[Link]
Entorno Desconectado
// Create the DataAdapter SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); // Establish Select Command (used to populate the DataSet) SqlCommand selectCmd = new SqlCommand("Select * from UserProfile", connection); [Link] = selectCmd; // Create the DataSet DataSet sqlDataSet = new DataSet("UserProfile"); // Fill DataSet [Link](sqlDataSet, "UserProfile"); [Link]();

26

[Link]
Entorno Desconectado
// Access Data // First table in the data set DataTable dataTable = [Link]["UserProfile"]; // First row in the table DataRow dr = [Link][0] [Link]( dr["loginName"] ); // Access Email Column DataColumn emails = [Link]["email"];

27

También podría gustarte