Sesión 05
Sesión 05
Sesión 05
Capítulo 05
ADO.Net
• Arrays
– Uni-dimensionales, Multidimensionales
– Estructura interna
– Arrays tipo valor y tipo referencia
– Iteración
• Colecciones
– ArrayList
• Ver diapositivas previas.
Referencias
• ADO.NET
ADO.NET
SQL Server
Oracle ODBC OLEDB
MySQL
SQL-data Non-SQL-data
MS SQL Server, Oracle, Directory Services, Mail,
Jet, Foxpro, ... Text, Video, ...
• Qué es ADO.Net?
– Es parte fundamental de NET Framework.
– Es un modelo de objetos desarrollado por Microsoft.
– Provee servicios de acceso a datos para múltiples fuentes de datos.
• Bases de datos relacionales (RDBMS)
• XML
• Archivos Excel, Access, etc…
– Provee componentes para crear aplicaciones web y distribuidas
sobre diversas fuentes de datos.
– Se accede mediante el namespace System.Data.
– Provee escenarios conectados y desconectados.
– Es la evolución de Microsoft ADO (Activex Data Objects).
– Provee una serie de interfaces y clases abstractas para
implementaciones de terceros. (API Independendiente)
Provider-
Independiente
clases base abstractas Db* (ej: DbConnection) del código de
la aplicación
en esta capa
Provider-
3rd 3rd específico en
Sql OleDb ODBC Oracle el código de la
Party 1 Party 2
aplicación en
esta capa
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
• Arquitectura de ADO.NET (2 Componentes fundamentales)
– Los NET Framework Data Providers – El DataSet
• Son un conjunto de objetos (Connection, • Son representaciones “en memoria” de los
Command, DataReader, DataAdapter). datos.
• Permiten la conexión a la fuente de datos. • Independiente de la fuente de datos.
• Permiten obtener, modificar y datos. • Puede utilizar múltiples fuentes de datos.
• Pueden ejecutar “Stored Procedures” y • Proporciona un conjunto de objetos
enviar/recibir parámetros (DataTables, DataRow, etc.)
• Utilizan XML para su persistencia.
• Diseñado para escenarios “desconectados”
• Data Providers
– Cualquier aplicación que utiliza
ADO.Net accede a la fuente de
datos mediante un Provider.
– Están programados en código
manejado, pero pueden haber
excepciones.
– Permiten conectar a la BD, ejecutar
comandos y obtener resultados
– Está disponibles mediante sus
respectivos Namespaces.
• System.Data.SqlClient
• System.Data.OracleClient
• System.Data.OleDb
– Cada Provider implementa
interfaces para sus objetos.
– Se pueden implementar Providers
por terceros (MySQL, PostgreSQL,
DB2, etc.)
Provides data access for Microsoft SQL Server version 7.0 or later. Uses
.NET Framework Data Provider for SQL Server
the System.Data.SqlClient namespace.
For data sources exposed using OLE DB. Uses the System.Data.OleDb
.NET Framework Data Provider for OLE DB
namespace.
For Oracle data sources. The .NET Framework Data Provider for Oracle
.NET Framework Data Provider for Oracle supports Oracle client software version 8.1.7 and later, and uses the
System.Data.OracleClient namespace.
A helper object that will automatically generate command properties of a DataAdapter or will derive
CommandBuilder parameter information from a stored procedure and populate the Parameters collection of a Command
object. The base class for all CommandBuilder objects is the DbCommandBuilder class.
A helper object that provides a simple way to create and manage the contents of connection strings used by
ConnectionStringBuilder the Connection objects. The base class for all ConnectionStringBuilder objects is the
DbConnectionStringBuilder class.
Defines input, output, and return value parameters for commands and stored procedures. The base class for
Parameter
all Parameter objects is the DbParameter class.
Returned when an error is encountered at the data source. For an error encountered at the client, .NET
Exception Framework data providers throw a .NET Framework exception. The base class for all Exception objects is the
DbException class.
Error Exposes the information from a warning or error returned by a data source.
Provided for .NET Framework data provider code access security attributes. The base class for all
ClientPermission
ClientPermission objects is the DBDataPermission class.
Recommended for middle-tier applications using Microsoft SQL Server 7.0 or later.
For SQL Server 6.5 and earlier, you must use the OLE DB Provider for SQL Server with
the .NET Framework Data Provider for OLE DB.
For SQL Server 7.0 or later, the .NET Framework Data Provider for SQL Server is
.NET Framework Data Provider for OLE DB recommended.
Also recommended for single-tier applications using Microsoft Access databases. Use of
an Access database for a middle-tier application is not recommended.
.NET Framework Data Provider for ODBC Recommended for middle and single-tier applications using ODBC data sources.
.NET Framework Data Provider for Oracle Recommended for middle and single-tier applications using Oracle data sources.
• Data Providers
– Objeto Connection
• Provee la capacidad de conexión a cualquier fuente
de datos.
• Cada Provider proporciona su implementación:
• La información necesaria para realizar la conexión se
entrega mediante la propiedad ConnectionString.
• Abre la conexión con la BD mediante el método
Open().
• Cierra la conexión con la BD mediante el método
Close().
• Data Providers
– Objeto Command
• Una vez establecida la conexión, se utiliza el objeto Command.
• Puede ejecutar consultas de inserción, modificación, eliminación
de datos, etc.
• Puede invocar “Stored Procedures”.
• Maneja el envío y recepción de parámetros.
• Métodos:
– ExecuteReader() : ejecuta una consulta que devuelve un conjunto de datos
(DataReader ) .
– ExecuteScalar(): ejecuta una consulta que devuelve un simple valor escalar.
– ExecuteXmlReader(): ejecuta una consulta que devuelve un conjunto de
datos en formato XML (Sólo para SqlCommand).
– ExecuteNonQuery() : ejecuta una actualización de datos o similar.
• Data Providers
– Objeto DataReader
• Proporcionan acceso rápido a la data.
• Sólo se mueven hacia adelante y es read-only.
• Sólo pueden leer una fila a la vez.
• Para leer una fila se utiliza el método Read().
• Para leer los valores de la fila se utilizan los métodos
Get: GetString(n), GetInt32(n), etc.
• Data Providers
– Objeto DataAdapter
• Es el puente entre las partes desconectadas y conectadas de ADO.Net
• Utiliza los objetos Command para poblar los objetos desconectados
(DataSet).
• Utiliza los objetos Command para actualizar la BD en base a las
modificaciones del DataSet.
• El método Fill() puede llenar DataSets o DataTables.
• El DataAdapter (panorama)
• DataSet
– Representación en memoria de datos de
múltiples fuentes.
– Es independiente de la fuente de datos.
– Permite acceso y manejo más flexible de
la data que el DataReader.
– Pueden modificar la data a diferencia de
los DataReaders (read-only).
– Pueden guardar los cambios en la BD,
mediante el DataAdapter.
– Contiene múltiples objetos (DataTable,
DataColumn, DataView, etc.)
– Utilizan XML para su persistencia
– Diseñado para escenarios desconectados.
– Es la base sobre la cual se construyen los
DataSets tipados.
• DataSet
– Modelo de objetos
• Dataset (esquema)
DataSet
DataTable
DataTable schema
.Tables[...]
.Columns[..]
.Columns[...] DataColumn DataColumn
.Rows[...]
.Rows[..] DataRow
data
DataRow
.DefaultView DataView
...
.Relations[...]
DataRelation
DataRelation
...
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
• DataSet - DataAdapter
connectionless connection-oriented
ADO.NET Content Components ADO.NET Managed
Providers
DataSet
Tables DataAdapter
Fill
DataTable
Constraints
DataColumn
Update
DataRow
Relations
DataTable DataRelation
ReadXml
WriteXml
Database
XML file
Connectionless data flow Connection-oriented data flow
DataSet XxxDataReader
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
• Ejemplos de ADO.Net
– Objeto Connection
– Objeto Command
• ExecuteReader()
• ExecuteScalar()
• ExecuteXmlReader()
• ExecuteNonQuery()
• Comandos Paramétricos
– Objeto DataReader
– Objeto DataAdapter
– Objeto DataSet - DataAdapter
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
using (connection)
{
// Use the database connection.
}
Cn.Open();
Cn.Close();
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
namespace ConnectionTest
{
class Program
{
static void Main(string[] args)
{
SqlConnectionStringBuilder connBuilder = new SqlConnectionStringBuilder();
connBuilder.InitialCatalog = "TestDB";
connBuilder.DataSource = @".\SQLExpress";
connBuilder.IntegratedSecurity = true;
conn.Open();
Console.WriteLine("Connected to SQL Server v" + conn.ServerVersion);
conn.Close();
Console.ReadLine();
}
}
}
return reader;
}
}
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net ([email protected])
ADO.Net
• Ejemplos de ExecuteScalar()
SqlConnection connection = new SqlConnection(aConnectionString);
SqlCommand command = new SqlCommand( "SELECT COUNT(*) FROM Production.Product", connection);
command.CommandType = CommandType.Text;
connection.Open();
int count = (int)command.ExecuteScalar();
connection.Close();
• Ejemplo de ExecuteXmlReader()
using (SqlConnection connection = new SqlConnection(aConnectionString))
{
connection.Open();
while (reader.Read())
{
// Process XML node.
}
reader.Close();
if (rowsAffected == 1)
Console.WriteLine("The product has been updated successfully.");
else
Console.WriteLine("The product has not been updated.");
SELECT
@prmAverage=AVG(ListPrice), @varCount=COUNT(*)
FROM
Production.Product
WHERE
ListPrice > @prmPrice
SELECT
Name, ListPrice
FROM
Production.Product
WHERE
ListPrice > @prmPrice
RETURN @varCount
END
while (rdr.Read())
{
Console.WriteLine(string.Format("User {0}, Full Name {1} {2}", rdr.GetString(rdr.GetOrdinal("UserName")),
(string)rdr["FirstName"], rdr.GetString(rdr.GetOrdinal("LastName"))));
}
rdr.Close();
conn.Close();
Console.ReadLine();
}
}
try
{
connection.Open();
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}“, reader[0], reader[1]);
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
connection.Open();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
dataAdapter.Fill(myData, "UserTable");
testCommand.CommandText =
"Select FirstName, LastName from userTable;" +
" Select PermissionType from PermissionsTable";
dataAdapter.Fill(userData);