interoperabilidadnewton.uam.mx/xgeorge/hmoncayo/basesdedatos/presentaci... · 2005. 10. 28. ·...

199
Interoperabilidad

Upload: others

Post on 27-Jan-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

  • Interoperabilidad

  • La naturaleza del problema

    Operaciones distribuidasExistencia de aplicaciones independientesNecesidad continua de cambiosSiempre da pavor cambiar las aplicaciones existentesUso de tecnología variada a través de la empresaNecesidad de operar en WEB

  • Aplicaciones Independientes

    Presentación

    Reglas delnegocio

    Base de datos

    Presentación

    Reglas delnegocio

    Base de datos

    Presentación

    Reglas delnegocio

    Base de datos

    Presentación

    Reglas delnegocio

    Base de datos

    Pedidos Conta-bilidad

    Factura-ción

    Cuentaspor cobrar

  • Arquitectura de aplicaciones integradasAdaptación oportuna a cambios en los negociosProporcionar información veraz y oportunaApertura de las aplicaciones a nuevas formas de interfaz

  • Arquitectura IntegradaCapa de presentación

    Servidor de transacciones Máquina de Inteligenciadel negocio

    Componente deintegración

    Base de Datos Data Warehouse

  • HardwareServidores de transacciones Data warehouse

    Capa de presentación

    Firewall

    Database server

  • Midleware en el principio

    Terminales locales

    Terminales remotas

  • Internet

    TCP/IP se desarrolla a mediados de los 70’sEn 1983 se instaló en ARPANETUso de sockets para comunicación de procesos remotosLlamado de procedimientos remotos (RPC)

  • RPC’s

    Lenguaje dedefinición de

    interfazIDL

    stub

    Cliente

    Skeleton

    Servidor

  • Acceso a base de datos

    Oracle transparent gatewayDRDA de IBMODBC de MicrosoftOLE DB ADO (Active Data Objects)ADO NETJDBC

  • Proceso remoto de SQLServidorCliente

    SQL

    ParseQuery

    Execute

    Execute + params

    Datos

  • Procedimientos catalogados

    DesarrolloServidor

    Definición

    PlanCliente

    Ejecución

    Resultados

    Definición

    Basede

    datos

  • Requerimientos Empresariales

    EscalabilidadFacilita la incoprporación de hardwarePermite el empleo de bases de datos con replicaciónDepósitos de componentes

    Compartición de recursosControl de uso concurrente

    Robustez

  • Requerimientos Empresariales

    SeguridadControl del nivel de acceso de los usuarios

    Encriptamiento de mensajes en red

    Soporte de transaccionesBases de datos distribuidas

    Bases de datos heterogéneas

    Replicación

  • Middleware de componentesTransaccionales

    CaracterísticasOperación de componentes en un ambiente distribuido

    MTS (Microsoft Transaction Server)Ahora parte de COM+

    EJB (Enterprise Java Beans)CORBA

    Especificación de OMG

  • Arquitectura de tres capascon COM+

    DHTML HTML Win 32 Win FormsServicios depresentación

    IIS/ASP

    COM+

    Servicios deNegocio

    Servicios dedatos

    ADO OLEDB ODBC

  • Contenedor COM+

    Cliente Componentesescitos

    por usuariolControldel ciclode vida

    Envolturadel

    Objeto

    IMiInterfazIMiInterfaz

    IClassFactory IClassFactory

  • Introducción a .Net

  • .NET FrameworkWeb Services Web Forms Windows Forms

    Data and XML ClassesADO.NET, SQL, XSLT, XML

    Framework ClassesIO, string, security, threading, reflection, collections

    Common Languaje Runtimedebug, exceptions, type checking, JIT Compilesr

    Plataforma de Windows

  • Porque .Net

    Modelo consistente de programaciónTodos los servicios a través de oop

    Modelo simplificado de programaciónNo: IUnknown, AddRef, Release, HRESULT

    Una vez que funciona siempre funcionaComponentes en la misma versión

    Instalación simplificadaNo: Registro; solo copia de archivos

  • Porque .Net

    Independencia de la plataformaGeneración de CIL (Common IntermediateLanguaje)En ejecución CLR (Common LanguajeRuntime) traduce CIL a lenguaje de máquina

    Integración de lenguajesLa biblioteca de clases compartida por todos los lenguajes

  • Porque .NetReutilización del código

    Creación de componentes comunesManejo automático de memoria

    Colector de basura, no apuntadoresFuerte verificación de tiposDepuración multilenguajeBiblioteca de clases consistenteInteroperabilidad

    Acceso a componentes COMAcceso a código no administrado

  • Compiladores

    Código fuenteC#

    Compiladorde C#

    MóduloAdministrado

    Código fuenteBasic

    Compiladorde Basic

    MóduloAdministrado

    Código fuenteC++

    Compiladorde C++

    MóduloAdministrado

    Código fuenteJScript

    Compiladorde JScript

    MóduloAdministrado

  • Módulo administradoEncabezado PE

    Encabezado CLR

    Metadatos

    Código IL

    •Ejecutable Portable

    •Versión de CLR requerida•Punto de entrada

    •Descripción de tipos definidos en el módulo•Descripción de los tipos a los que hace referencia el módulo

    •Código en Lenguaje Intermedio de MS

  • MetadatosElimina la necesidad de encabezadosProporciona ayuda durante la ediciónPermite la serialización para procesamiento remotoPermite al colector de basura determinar los tipos de objetos en memoria

  • Ensambles

    Es una combinación de:Uno o mas módulosArchivos de recursos

    Es la unidad con que trabaja CLREs la unida mínima de

    Seguridad, reuso y versiónArchivo simple o multi archivo

  • Ensambles

    MóduloAdministrado

    MóduloAdministrado

    Archivo derecursos

    Compilador o

    Encadenador de ensambles

    Manifiesto

    MóduloAdministrado

    MóduloAdministrado

    Archivo deRecursos

    Ensamble

  • Carga y ejecución•Se carga MSCorLib.dll enel espacio de trabajo

    •Se sustituye la dirección dela función _CorExeMain

    •Se pasa el control a la instrucción JMP _CorExeMain

    •Se ejecuta _CorExeMain•_CorExeMain inicializa CLR•CLR examina el encabezado CLRpara localizar el punto de entrada

    •Se compila el IL del método •Se pasa el control al códigogenerado

    Ejecutable administrado

    Encabezado PE

    Sección .text

    Sección .idata

    Encabezado CLR

    IL

    Metadatos

    JMP _CorExeMain

    DLL: MSCorLib.dllFunción: _CorExeMain

    Sección Importr

  • Introducción a C#

  • Hola Mundousing System;

    namespace HolaMundo{

    class Hola{

    [STAThread]static void Main(string[] args){

    Console.WriteLine("Hola Mundo");}

    }}

  • Tipos de datosIntrínsecos

    Definidos por el lenguajeDefinidos por el usuarioTipo valor

    Su valor está en el stack o como parte de un tipo referenciaLa variable es su dirección

    Tipo referenciaSu dirección es tipo valor (está en el stack)Una variable contiene su direcciónSu valor está en el heap

  • Asignación de memoriaStack

    x

    y

    z

    Heap

    x

    y

    class Punto{

    private double x;private double y;public Punto(double x, double y){

    this.x = x;this.y = y;

    }}. . .int x, y;Punto z;z = new Punto(x, y);

  • Tipos de datos básicosTipo C# Bytes Tipo .NET Descripciónbyte 1 Byte Sin signo (0-255)

    char 1 Char Símbolo Unicode

    bool 1 Boolean true o false

    sbyte 1 Sbyte Con signo (-128 a 127)

    short 2 Int16 Con signo (-32,768 a 32,767)

    ushort 2 Uint16 Sin signo (0 a 65,535)

    int 4 Int32 Con signo (-2,147,483,647 a 2,147,483,647)

  • Tipos de datos básicosTipo C# Bytes Tipo .NET Descripciónuint 4 Uint32 Sin signo (

    -4,294,967,296 a-4,294,967,295

    float 4 Single ±1.5*10-45 a ±3.4*1038 con 6.3 dígitos

    double 8 Double ±5.0*10-324 a ±1.7*10308 con 16 dígitos

    decimal 8 Decimal 28 dígitos en punto fijo

    long 8 Int64 -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

    ulong 8 Uint64 El doble del anterior

  • Conversión de tipos básicos

    ImplícitaEs automática (short a int)No debe ser posible la pérdida de información

    ExplícitaSe requiere cuando pudiera haber pérdida de información (int a short)Se realiza con un operador de molde (cast)

  • Constantes

    Se les asigna valor en su declaraciónconst float pi = 3.1416;

    No se puede cambiar el valor de una constante

  • Enumeradoresenum dias {

    Lunes = 0,Martes = 1,Miercoles =2,Jueves = 3,Viernes = 4,Sabado = 5,Domingo = 6

    }

    enum dias {Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo

    }

  • Uso de enumeradoresusing System;namespace Enumeradores{

    class Enumerador{

    enum dias {

    Lunes = 0, Martes = 1, Miercoles =2,Jueves = 3, Viernes = 4, Sabado = 5, Domingo = 6

    }[STAThread]static void Main(string[] args){

    Console.WriteLine("Valor {0} Texto {1}",dias.Viernes.GetHashCode(), dias.Viernes);

    }}

    }

  • Formas de controlif

    if (expresión booleana)postulado1

    [elsepostuilado2]

    switch

    switch (expresion){

    case expresionConstante:postulado1salto

    . . .[default:

    postuladon]}

  • Definición de clases

    [atributos] [modificadores de acceso] class identificador [ :claseBase ]{ cuerpo de la clase }

    Ejemplo:

    public class Punto{

    public double x, y;}

  • Modificadores de acceso

    publicvisibilidad sin restricción

    privatevisibles desde la misma clase

    protectedvisibles desde la misma clase y clases derivadas

  • Modificadores de acceso

    internalVisibles desde cualquiera de los los miembros del mismo ensamble

    protected internalvisibles desde las clases derivadas y desde los miembros del mismo ensamble

    staticEl elemento pertenece a la clase, no a los objetos

  • Constructoras

    class Punto{

    private double x;private double y;public Punto(double x, double y){

    this.x = x;this.y = y;

    }}

  • Uso de constructora

    public class Prueba{

    public static void Main(string[] par){

    Punto p = new Punto(5.2, 7.3);Console.WriteLine("El punto es: {0}",

    p.ToString());}

    }

  • Inicializadores

    class Punto{

    private double x = 0;private double y = 0;. . .

    }

    1. Se pueden usar expresiones2. La constructora tiene precedencia

    sobre los inicializadores

  • Costructores de copiaclass Punto{

    private double x;private double y;. . .public Punto(Punto w){

    x = w.x;y = w.y;

    }}

    1. Reciben un argumento delmismo tipo

    2. Inicializan las variables miembrocon los valores del argumento

  • Constructores estáticos1. No tiene argumentos2. Se ejecuta automáticamente antes de crear la primera instancia3. Se puede usar para inicializar miembros estáticos

    class Punto{

    static public Punto origen;public Punto(double x, double y){

    this.x = x;this.y = y;

    }static Punto(){

    origen = new Punto(12.5, 7.2);}

    }

  • Destrucción de objetos

    Finalize()Es llamado automáticamente cuando el colector de basura destruye el objetoNo se puede invocar explícitamente

    Función destructoraSu sintaxis es la misma que en C++Realmente se invoca la función Finalize de la clase base

  • Paso de parámetros

    Tipos de valorSe pasan por valorSe usa el modificador ref para que pasen por referenciaSe usa el modificador out cuando se pasa un parámetro sin inicializar

  • Sobrecarga

    void funcion(int x);void funcion(string s);void funcion(double z, int x);

  • Propiedadesclass Complejo{

    double r, i;public Complejo(double r, double i){

    this.r = r;this.i = i;

    }public double Real{

    get{return r;}set{r = value;}

    }

  • HerenciaHerencia simple

    public class ListBox : Window

    Llamado a funciones de clase basebase.DrawWindow();

    Llamado de constructora de clase base

    public ListBox(int top, int left, string theContents):base(top, left) // call base constructor

    {

  • Polimorfismo

    Window

    int x;int y;

    virtual DrawWindow()

    ListBox

    string[] text

    overrride DrawWindow()

    Button

    string text

    override DrawWindow()

    CheckBox

    bool status

    override DrawWindow()

  • PolimorfismoArreglo de WindowwinArray

    ListBox

    string[] text

    DrawWindow()CheckBox

    bool status

    DrawWindow()

    CheckBox

    bool status

    DrawWindow()

    for (int i = 0;i < 3; i++){

    winArray[i].DrawWindow( );}

  • Clases abstractas

    Función abstracta

    abstract public void DrawWindow( );

    Si una clase tiene una función abstracta la clase es abstractaNo se pueden crear objetos de una clase abstractaSi se pueden crear referencias a objetos de clases abstractasLos métodos abstractos se deben definir en todas las clases derivadas

  • La clase ObjectEs la base de todas las clasesContiene las funciones:Método Usado para

    Equals() Compara objetosGetHashCode() Calcula un hashGetType() Proporciona tipoToString() Obtiene cadenaFinalize() Finaliza el objetoMemberWiseClone() Crea una copia

  • BoxingPermiten manejar los tipos valor como tipos referenciaint x = 250;Object o = i;

    HeapPilaBoxing250x

    250

    Into

    Es implícito.

    Ocurre cuando se requiere que un tipo valorse convierta en un tipo referencia (llamado a funciones)

  • Unboxing

    Debe hacerse de manera explícita

    int k = (int)o;

    HeapPila

    250250

    IntUnboxing

    k

    o

  • Sobrecarga de operadoresDebe hacerse con funciones estáticas

    públicas

    public static Complejo operator+(Complejo w, Complejo z){

    return new Complejo(w.r + z.r, w.i + z.i);}public override string ToString(){

    return "(" + r + ", " + i + ")"; }

  • Operadores de conversiónExplícito

    public static explicit operator double(Complejo z){

    return z.r;}Implícito

    public static implicit operator Complejo(double z){

    return new Complejo(z, 0);}

  • Structs

    Implicitamente derivan de ObjectNo soportan herencia

    No pueden heredar de otras claseNo se pueden usar como base

    No constructora por omisiónNo destructoraNo inicializadoresSon tipos valor

  • Interfaces

    Una clase que deriva de una interfaz se compromete a implementar sus:

    MétodosPropiedadesEventosIndicadores (Indexers)

  • Declaración de interfaces

    [atributos] [modificadores de acceso] interface nombre_interfaz[: lista_base]{cuerpo de la interfaz}

    interface IStorable{

    // no access modifiers, methods are public// no implementationvoid Read( );void Write(object obj);int Status { get; set; }

    }

  • Uso de la interfaz

    static void InvocaInterfaz(IStorable o){

    o.Status = 2;o.Read();o.Write(o);

    }

  • Interfaces

    Una interfaz puede heredar de otraUna clase puede heredar varias interfacesUso deo operador is

  • Operadores is y asisif (doc is IStorable)

    {IStorable isDoc = (IStorable) doc;isDoc.Read();

    }

    asIStorable isNote = theNote as IStorable;

    if (isNote != null){

    isNote.Read( );isNote.Write( );

    }

  • ArreglosUnidimensional

    int[] pesos = new int[8] {52, 85, 67, 49, 71, 96, 55, 61};for (i = 0; i < 8; i++)

    Console.Write("{0}\t", pesos[i]);

    Clausula foreach

    foreach(int k in pesos)Console.Write("{0}\t", k);

  • Arreglos rectangularesstatic void ArreglosRectangulares(){

    Console.WriteLine("ArregloRectangular");int[,] x = new int[, ] {

    {12, 16, 25},{11, 21, 17},{7, 15, 21},{12, 34, 85}};

    Console.WriteLine("Length {0}", x.GetLength(0));for (int i = 0; i < x.GetLength(0); i++){

    for (int j=0; j < x.GetLength(1); j++)Console.Write("\t{0}", x[i,j]);

    Console.WriteLine();}

    }

  • Arreglos dentadosstatic void ArreglosDentados(){

    Console.WriteLine("ArregloDentados");int[][] x;x = new int[4][];x[0] = new int[] {11, 12};x[1] = new int[] {1, 2, 3, 4, 5};x[2] = new int[] {56, 43, 56, 33};x[3] = new int[] {12};for (int i = 0; i < x.Length; i++){

    for (int j=0; j < x[i].Length; j++)Console.Write("\t{0}", x[i][j]);

    Console.WriteLine();}

    }

  • Indexerstype this [type argument]{get; set;}

    public class ListBoxTest{

    string[] strings;public string this[int index] {get {

    if (index < 0 || index >= strings.Length) {// handle bad index

    }return strings[index];

    }set {

    // add only through the add methodif (index >= ctr ){

    // handle error}else

    strings[index] = value;}

    }}

  • Interfaces de colecciónInterfaz DescripciónIEnumerable Para usar foreach

    ICollection Implementado por colecciones

    IComparer Para poder ordenar la colección

    IList Para usar colecciones tipo arreglo

    IDictionary Colecciones llave-valor

    IDictionaryEnumerator Combina IDictionary con IEnumerator

  • IEnumerableUna clase que implementa IEnumerable puede ser usada en el ciclo foreach

    ListBox:IEnumerable ListBoxEnumerator:IEnumerator

    IEnumerator GetEnumerator()bool MoveNext()

    void Reset()object Current{get;}

  • ICollection : IEnumerable

    IEnumerable

    void CopyTo(Array array, int index)int Count {get;}

    bool IsSincronized{get;}object SyncRoot {get;}

  • ArrayListManeja arreglos dinámicosTiene una serie de funciones como:

    Add()BinarySearch()Clear()IndexOf()Sort()

  • Tarea 1

    Implementar una lista ordenada de objetos con las siguientes caracteísticasEl tipo de los objetos podrá ser cualquieraLos objetos almacenados serán del mismo tipoUtilice la interfaz IComparable e IComparer para generalizar la lista

  • String

    public sealed class String : IComparable, IClonable, IConvertible

    Es una clase inmutable (Nunca cambia su valor)

    Interfaz ImplemntaIComparable CompareTo()IClonable Clone()IConvertible ToInt32(), ToDouble(),...

  • StringBuilder

    public sealed class StringBuilder : IComparable, IClonable, IConvertible

    Es una clase mutable (Cambia su valor)

  • Excepciones

    Errores de código (bugs) Pueden provocar excepciones pero no lo son

    Errores provocados por el usuarioSe evitan con validación

    ExcepcionesCondiciones anormalesSe puede tomar alguna medida correctiva

  • Excepciones

    Cuando ocurre alguan situación anormal

    Se lanza una excepción (throw)Se busca hacia atrás en el stack un manejador apropiado de la excepciónEl manejador de excepción se implementa con catchSi no se encuentra ninguna CLR termina el programa

  • Instrucción throw

    throw new System.Exception();

    Enter Main...Enter Func1...Enter Func2...

    Excepción no controlada: System.Exception: Se inició una excepción de tipo Systm.Exception.at Excepcion.Test.Func2() in c:\documents and settings\hugo\mis documentos\

    itroduccionalaprogramacion\ejemplos\excepcion\class1.cs:line 28at Excepcion.Test.Func1() in c:\documents and settings\hugo\mis documentos\

    itroduccionalaprogramacion\ejemplos\excepcion\class1.cs:line 21at Excepcion.Test.Main() in c:\documents and settings\hugo\mis documentos\in

    roduccionalaprogramacion\ejemplos\excepcion\class1.cs:line 13Press any key to continue

  • Atrapando excepciones

    try{

    Console.WriteLine("Entering try block...");Func2();Console.WriteLine("Exiting try block...");

    }catch{

    Console.WriteLine("Exception caught and handled.");

    }

  • Excepciones específicastry {

    double a = 5;double b = 0; Console.WriteLine ("{0} / {1} = {2}",

    a, b, DoDivide(a,b));}// most derived exception type firstcatch (System.DivideByZeroException) {

    Console.WriteLine("DivideByZeroException caught!");}catch (System.ArithmeticException) {

    Console.WriteLine("ArithmeticException caught!");}// generic exception type lastcatch {

    Console.WriteLine("Unknown exception caught");} finally {

    Console.WriteLine ("Close file here.");}

  • Clase Exception

    Propiedad ComentarioHelpLink Vinculo de ayudaInnerException Instancia que provocó la excepciónMessage Descripción de la excepciónSource Nombre de la aplicaciónStackTrace Rastro del stackTargetSite Metodo que inició la excepción

  • Excepciones de usuarioDeben derivarse de System.ApplicationException

    public class MyCustomException : System.ApplicationException

    {public MyCustomException(string message):

    base(message){

    }}

  • RelanzamientoOcurre cuando dentro del catch se lanza otra exepción

    try{

    DangerousFunc3( );}catch (System.DivideByZeroException e){

    Exception ex =new Exception("E2 - Func2 caught divide by zero",e);

    throw ex;}

  • Delegados y eventos

  • Delegadospublic delegate bool Mayor(Object o1, Object o2);

    Declaración:

    private Mayor MayorDelegada;public Lista(Mayor delegada) : base(null, null){

    MayorDelegada = delegada;}

    Definición:

    Uso:MayorDelegada(x, n.siguiente.e)

    Definición:public static bool Mayor(Object p1, Object p2){

    return String.Compare(((Perro)p1).Nombre, ((Perro)p2).Nombre) > 0;

    }public static readonly Lista.Mayor DelegadoMayor =

    new Lista.Mayor(Mayor);

  • Delegados propiedadespublic static bool Mayor(Persona p1, Persona p2){

    return p1.edad > p2.edad;}public static Lista.Mayor DelegadoMayor{

    get{

    return new Lista.Mayor(Mayor);}

    }En main

    Lista p = new Lista(Persona.DelegadoMayor);

  • Arreglos de delegadosPermiten establecer un conjunto de operaciones que se deben ejecutar en un cierto orden

    Las opercione

  • Multicasting

    Un delegado acepta multiples suscriptoresEs posible utilizar los operadores += y -= para agregar y eliminar suscriptoresLos suscriptores se invocan en el orden en que se realizaron las suscripciones

  • EventosManeja el paradigma publicador –suscriptorClase publicador

    Define un delegado con el atributo event

  • EventosEventArgsDisplayClock (Suscriptor)

    TimeInfoEventArgs void Suscribe(Clock);void TimeHasChanged(Clock,

    TimeInfoEventArgs)int hour, minute, second

    TimeInfoEventArgs()

    Clock (Publicador)int hour, minute, second

    delegate SecondChangeHandler(Object,TimeInfoEventArgs)

    event SecondChangeHandler OnChangevoid Run()

    LogClock (Suscriptor)void Suscribe(Clock);void WriteLogEntry(Clock,

    TimeInfoEventArgs)

    int main(){

    Clock cl = new Clock;DisplayClock dc = new DisplayClock();dc.Subscribe(theClock);LogCurrentTime lct = new LogCurrentTime();lct.Subscribe(theClock);theClock.Run();

    }

  • ADO.Net

  • Características

    Soporte de XMLAcceso sin conexiónMejor control en actualizacionesIntegrado totalmente en NET Framework

  • Proveedores .NET

    OLE DB .NET ProviderManeja todas las fuentes con proveedores OLE DBOracle, SQL Server,

    SQL Client Data ProviderOptimizado para SQL Server

  • Clases conectadas y deconectadas

    Connection

    Transaction

    DataAdapter

    Command

    Parameter

    DataReader

    Objetos Conectados Objetos Desconectados

    DataSet

    DataTable DataView

    DataRow

    DataColumn

    Constraint

    DataRelation

  • ConnectionOleDbConnection

    ConnectionStringConnectionTimeoutDatabaseDataSourceProviderServerVersionSiteState

    Open()Close()CreateCommand()BeginTransaction()

  • Connection

    Cadena de conexiónServidorUsuarioContraseña

    Establece la conexión con la base de datos

    SqlConnection connection = new SqlConnection("Data Source =calipso;Initial Catalog=Escolar; user id=Cynthia");

  • CommandOleDbCommand

    CommandTextCommandTimeoutCommandTypeConnectionContainerDesignTimeVisibleParametersTransaction

    ExecuteReader()ExecuteNonQuery()ExecuteScalar()

  • Command

    Comandos de SQL en propiedad TextConsultaLlamado a un procedimiento catalogadoActualización

    string SqlText = "Select matricula, nombre, estado from Alumno";SqlCommand comando =

    new SqlCommand(SqlText, connection);

  • DataAdapterActua como puente entre la base de datos y los objetos desconectadosOperaciones

    Fill llena un DataSet con informaciónUpdate actualiza la base de datos

    PropiedadesSelectCommandInsertCommandDeleteCommandUpdateCommand

    SqlDataAdapter adapter = new SqlDataAdapter(comando);DataSet ds = new DataSet("Alumnos");

  • DataReader

    Está diseñado para recorrer hacia adelante un conjunto de registrosNo permite actualización

    connection.Open();Console.WriteLine("Prueba de DataReader .............");SqlDataReader dr = comando.ExecuteReader();while (dr.Read())

    Console.WriteLine(dr[“nombre”].ToString());

  • DataTable

    DataTable

    ColumnsRows

    DataColumn

    ColumnNameDataTypeDefaultValueMaxLength

    DataColumn

    ColumnNameDataTypeDefaultValueMaxLength

    DataColumn

    ColumnNameDataTypeDefaultValueMaxLength

    DataRow

    ItemRowStateBeginEdit()EndEdit()

  • Transaction

    Agrupa un conjunto de operaciones sobre la base de datos en una transacciónMétodos

    BeginCommitRollback

  • Parameter ObjectSe utiliza para proporcionar los parámetros de una consultaPropiedades

    ParameterNameValueDbTypePrecision, Scale, Size

  • DataColumn ObjectContiene la descripción de una columna

    NombreTipo de datoSi admite valores nulosAutoincremento

    table = ds.Tables["Alumno"];foreach (DataColumn dc in table.Columns)

    Console.WriteLine("{0}, {1}", dc.ColumnName.ToString(), dc.DataType.ToString());

  • Constraint ObjectEs una colección de DataTableContiene reglas de integridad

    PrimaryKeyForeignKeyUnique

    DataTable

    ConstraintsPrimaryKey

    ForeignKeyConstraint

    DataColumnDataColumn

    DataColumn

    UniqueConstraint{

  • ForeignKeyConstraintUso de Reglas DescripciónAcceptRejectRule Cuando se aceptan las

    modificacionesDeleteRule Se aplica al eliminar un renglón

    UpdateRule Se aplica al actualizar un renglón

    Regla DescripciónCascade Elimina o actualiza las filas

    afectadasSetNull Establece los valores de la relación

    en nulosSetDefault Establece los valores relacionados

    por defectoNone No hacer nada

  • DataRow ObjectEs una colección de DataTable

    foreach(DataRow row in table.Rows){

    string coma = "";foreach(Object ob in row.ItemArray){

    Console.Write("{1}{0}", ob.ToString(), coma);coma = ", ";

    }Console.WriteLine("");

    }

  • DataSet ObjectContiene una colección TablesGetChanges()

    Genera un DataSet con los cambiosMerge()

    Genera un DataSet a partir de dos

  • DataSet

    DataSet

    DataSetNameTablesRelations

    DataTable

    DataRelation

    DataTableDataTable

    DataRelationDataRelation

  • DataRelation ObjectUn DataSet Contiene la colección RelationsCada DataRelation establece la relación entre dos tablasFacilitan la presentaciónFacilitan la actualizaciónSon dinámicasPermiten relacionar tablas de diferentes fuentes

  • DataRelation

    DataRelation

    ParentColumnsChildColumns

    DataColumnDataColumn

    DataColumn

    DataColumnDataColumn

    DataColumn

  • DataView Object

    OrdenamientoFiltrado de informaciónSe pueden definir varios DataView sobre la misma tabla

  • Versión de una fila

    Constante Valor DescripciónCurrent 512 Valor actual de la columnaOriginal 256 Valor original almacenado en la columnaProposed 1024 Valor propuesto antes de confirmaciónDefault 1536 Acción por defecto

  • Estado de las filasValor Valor DescripciónUnchanged 2 No ha habido cambios

    Detached 1 La fila no pertenece a la base de datos

    Added 4 La fila no existe en la base de datos

    Modified 16 Hay cambios pendientes

    Deleted 8 Pendiente de ser eliminado

  • Ejemplo del estadoEjemplo Estadorow = pedidos.NewRowrow[“pedidoId”] = 25

    Detached

    pedidos.Rows.Add(row) Added

    row = pedidos.Rows[0] Unchanged

    row[“fecha”] = “03/06”03” Modified

    row.Delete() Deleted

  • Actualización

    DataAdapter

    UpdateCommand

    SelectCommandCommand Text

    Command Text

    nomNewemplIdOldversionOldUpdateRowSource Comentarios

    Both (por defecto) Primera fila y parámetros de salida

    FirstReturnedRecord Datos de la primera fila devuelta

    None Se omiten filas y parámetros devueltos

    OutputParameters Se usan los parámetros de salida

    Parameters

    Update empl set nom = @nomwhere emplId = @emplId and version = @version

  • Texto para Update

    UPDATE pedido SET pedidoId = ?, fecha = ?, emplId = ? WHERE (pedidoId = ?) AND (emplId = ? OR ? IS NULL AND emplId IS NULL) AND (fecha = ? OR ? IS NULL AND fecha IS NULL) AND (version = ? OR ? IS NULL AND version IS NULL);

    SELECT version, pedidoId, fecha, emplIdFROM pedido WHERE (pedidoId = ?)";

  • Texto para Insert

    INSERT INTO detalle(version, pedidoId, articId, cant) VALUES (?, ?, ?, ?);

    SELECT version, pedidoId, articId, cant FROM detalle WHERE (articId = ?) AND (pedidoId = ?)";

  • Texto para Delete

    DELETE FROM detalle WHERE (articId = ?) AND (pedidoId = ?) AND (cant = ? OR ? IS NULL AND cant IS NULL) AND (version = ? OR ? IS NULL AND version IS NULL)";

  • Uso de timestamp

    DataAdapter

    UpdateCommand

    SelectCommand

    SELECT version, emplId, nom from empl

    Update empl set nom = ? where emplId = ? and version = ?

    nomNewemplIdOldversionOld

    Parameters

    InsertCommand

    Insert empl values (NULL, ?, ?)

    Delete emplwhere emplId = ? and version = ?

    DeleteCommand

    nomNewemplIdNew

    emplIdOldversionOld

  • Procedimientos catalogados

    Select

    create procedure spSelectDetalle @pedidoId smallintasSelect Detalle.version, detalle.pedidoId, detalle.ArticId,

    detalle.cant, artic.descrfrom detalle

    inner join artic on artic.articId = detalle.articIdwhere pedidoId = @pedidoId

  • Procedimientos catalogados

    Insert

    Create procedure spInsertDetalle@pedidoId_nue smallint,@articId_nue smallint,@cant_nue decimal(6, 2)

    asInsert Detalle values (null, @pedidoId_nue,

    @articId_nue, @cant_nue)

  • Recuperación de valores

    Los campos identity se generan cuando se inserta un nuevo renglónLos campos timestamp se modifican automáticamente cuando se modifica un renglón de una tablaCampos que se encuentran en otra tabla

  • Proc Updatecreate procedure spUpdateDetalleRec@cant_nue decimal(6, 2),@pedidoId_ant smallint,@articId_ant smallint,@version_ant timestamp,@pedidoId_nue smallint,@articId_nue smallintasUpdate Detalle set cant = @cant_nue, pedidoId = @pedidoId_nue,

    articId = @articId_nuewhere pedidoId = @pedidoId_ant and articId = @articId_ant

    and version = @version_ant;Select Detalle.version, detalle.pedidoId, detalle.ArticId,

    detalle.cant, artic.descrfrom detalle inner join artic on artic.articId = detalle.articIdwhere pedidoId = @pedidoId_nue and artic.articId = @articId_nue

  • Proc Insert

    Create procedure spInsertDetalleRec@pedidoId_nue smallint,@articId_nue smallint,@cant_nue decimal(6, 2)asInsert Detalle values (null, @pedidoId_nue, @articId_nue, @cant_nue);Select Detalle.version, detalle.pedidoId, detalle.ArticId,

    detalle.cant, artic.descrfrom detalle inner join artic on artic.articId = detalle.articIdwhere pedidoId = @pedidoId_nue and artic.articId = @articId_nue

  • CurrencyManager

    Control Ligado

    CurrencyManagerControl Ligado

    Origende

    datos

    CurrencyManagerControl LigadoOrigen

    de datos

    Formularioo

    contenedorBindingContext

    controla

    controla

  • Conjuntos de datoscon tipos

    Contienen la descripción de tablas y columnasFacilitan el desarrollo de las aplicacionesEvitan el uso índices de cadenasEvitan errores en tiempos de ejecuciónTienen representación en XMLSon intercambiables con XML

  • Crear un conjunto de datos con tipos

    En un proyecto con una forma se agrega uno o varios DataAdapters

    Se configura la conexiónSe configuran los comandos

    A partir de un DataAdapterSe crea el DataSet con todos los orígenes de datos necesariosSe crean las relaciones

    Conviene cambiar los nombres generados

  • AtributosAgregan metadatos a los componentes de un ensambleLos atributos se pueden aplicar a:

    ClasesMétodosEnumeradoresEventosInterfacesParámetrosetc.

  • Aplicar un atributo[BugFixAttribute(121,"Jesse Liberty","01/03/05")][BugFixAttribute(107,"Jesse Liberty","01/04/05",

    Comment="Fixed off by one errors")]public class MyMath{...

    [BugFixAttribute(121,"Jesse Liberty","01/03/05"),BugFixAttribute(107,"Jesse Liberty","01/04/05",

    Comment="Fixed off by one errors")]public class MyMath{...

  • Definición de atributosSystem.Attribute

    El nombre debe terminar con “Attribute”,al aplicarlo se puede omitir “Attribute”

    •Los parámetros posicionales se definenen la constructora

    •Los parámetros por llave se definen comopropiedades

    BugFixAttribute

    BugFixAttribute(bugId, programmer, date)public static Comment{

    get

  • Sujetos de los atributos[AttributeUsage(AttributeTargets.Class |

    AttributeTargets.Constructor |AttributeTargets.Field |AttributeTargets.Method |AttributeTargets.Property,AllowMultiple = true)]

    public class BugFixAttribute : System.Attribute

    •Se definene mediante el atributo AttributeUsage•Su primer parámetro es un conjunto de flags tomados del enum AttributeTarget•El segundo parámetro indica si el Atributo se puede aplicar en forma múltiple

  • Reflexión

    Permiten obtener información de un ensamble

    Tipos de datosClases y funcionesInterfacesTipos valor

  • MetadatosDescriben los tipos de datos (clases)

    Sus atributos y mètodosPermite combinar módulos en diferentes lenguajesPosibilit que el colector de baura localizar los objetos activosPermite proporcionar ayuda durante la ediciónSe utiliza en la serialización (disco, net)

  • Reflexión

    Permite que los componentes desarrollados por el usuario puedan

    Incorporarse en la barra de herramientasEl IDE podrá desplegar su ventana de propiedades

    Un método puede alterar su comportamiento dependiendo del objeto que lo llamó

  • Usos de reflexión

    Es posible crear dinámicamente una instancia de una claseA un objeto existente se le puede asociar un tipoSe pueden invocar los métodos y propiedades del objeto

  • Clases de ReflectionAssembly Define y carga ensables

    GetModules regresa una colección de módulos

    Proporciona información de un móduloGetTypes() regresa una colección de las clases (Type)Module

    Type Proporciona la información de los tiposGetMembers() regresa una colecciónde MemberInfo

    MemberInfo Proporciona información de los datos miembros, funciones, enumeradores, etc.

  • Enlazado tardío

    Una vez descubierto un método es posible invocarlo usando reflexión

    Obtener la clase que contiene la funciónUtilizar el método Activator.CreateInstance para crear una instancia de la clase

  • Métodos estáticosType

    mathType(Type)

    GetType()

    cosMethoth(MethodInfo)

    GuetMethod()

    Invoke()

    Type.GetType("System.Math");

  • Métodos de instanciaAssembly

    asm(Assembly)

    LoadFrom()

    someType(Type)

    GuetType()

    Invoke()

    miMetodo(MethodInfo)

    GetMethod()

  • Procesamiento Remoto

  • Carga de CLR

    Se carga como un componente COMCrea un dominio de aplicaciónCrea el Heap administradoCrea un depósito de hilos de ejecución

  • Dominio de aplicación

    Proceso Windows

    Motor de ejecución, colector de basura, depósito de hilos

    Ensambles de dominio neutoHeap

    Tipo m1 m2

    Tipo m1 m2AssemblyMS Core

    Dominio de aplicación 1

    HeapTipo m1 m2

    Tipo m1 m2

    AssemblyApp 1

    Dominio de aplicación 2

    HeapTipo m1 m2

    Tipo m1 m2AssemblyOtra AppAssembly

    App 2

  • Dominios de aplicación

    AisladosLos objetos no se ven

    Pueden descargarseConfigurables individualmente

    SeguridadSe pueden crear y descargar conAppDomain.CreateDomain(“nombre”)AppDomain.Unload(domain)

  • Dominio de aplicación

    using System; using System.Reflection; class AppDomain3 {

    public static void Main() {//Create the new application domain. AppDomain domain = AppDomain.CreateDomain("MyDomain", null); //Output to the console. Console.WriteLine("Host domain: " +

    AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("new domain: " + domain.FriendlyName); Console.WriteLine("Application base is: " +

    domain.BaseDirectory); Console.WriteLine("Relative search path is: " +

    domain.RelativeSearchPath); Console.WriteLine("Shadow copy files is set to: " +

    domain.ShadowCopyFiles); AppDomain.Unload(domain); }

    }

  • MarshalingBy value By value

    Cliente

    Proxi Servidor

    Objeto

    Receptor

    ClienteCopia

    delobjeto

    Servidor

    Objeto

  • Hilos de ejecución

    Dominio de aplicación 1 Dominio de aplicación 1

    Hilo de ejecución

  • Descarga de un dominio

    Se lanza ThreadAbortExceptinSe pueden atrapar fuera del dominio

    Se invalidan todos los ProxisCualquier llamado a un objeto del dominio provoca AppDommainUnloadedException

  • Aplicaciones Consola o Windows

    CLR carga el COM adecuado según el encabezado del ensambleSe determina el punto de entrada (Main)Se invoca al métodoCuando se hace referencia a otro ensamble este se cargaAl terminar Main se descarga el Dominio de aplicación y se termina el proceso

  • Contextos

    Dominio de aplicación

    Contexto 1 Contexto 2

    Objeto 1 Objeto 2Marshaling

  • Tipo de Objetos

    Objetos ÁgilesSe ejecutan en el contexto del clienteNo se usa marshaling

    Objetos LigadosSi se invocan desde otro contexto se usará marshaling

  • Objetos ligados y ágiles

    Objeto C(ligado)

    Objeto B(ágil) Database

    Objeto A(ligado con soporte de

    transacciones)

  • Objetos ligados y ágiles

    Objeto C(ligado)

    Objeto B(ligado) Database

    Objeto A(ligado con soporte de

    transacciones)

    Creación

  • Definición del contextoDefinición Tipo de objeto ComentarioSin atributos Ágil Opera en el contexto

    que invoca

    Derivado deContextBoundObjectsin atributos

    Ligado Se ejecuta en el contexto de su creador

    Con atributos Ligado Se ejecuta en su propio contexto

    [Serializable] oderivado deMarshalByRefObject

    Ágil Se ejecuta en el contexto del que lo invoca

  • Tipos de servidorSingleton(atiende todos losmensajes)

    Well known(sin conexión)

    Single call(se crea un nuevo objeto por cada llamado)

    Servidor

    Activado por cliente(con conexión)

  • Servidor con interfaces

    Evita el acoplamiento entre el cliente y el servidorIndependiza al cliente de los cambios internos del servidor (mientras no cambie la interfaz)

  • Hilos de ejecución

  • Hilos de ejecuciónSon mas ligeras que un procesoPueden existir varios hilos de ejecución de una misma aplicación en un procesoPueden intercatuar entre síUsos típicos

    Realizar un proceso largo y permitir que el usuario continue interactuando con la aplicaciónEn los servidores se pueden crear tareas para atender en forma indivudual varias solicitudes de servicios.

  • Creación de una hilo de ejecución

    public delegate void ThreadStart()

    Thread

    objeto

    new ThreadStart(f)

    new Trhead(delegate)

    delegate

    Start()

  • Espera de Hilos

    Threadobjeto

    Start()

    Join()

  • Suspensión de hilos

    Threadobjeto

    Start()

    Interrupt()

    catch(ThreadInterruptException e)

  • Sincronización

    Hilo A Recurso Hilo B

    Solicita Información

    Solicita Información

    Actualiza Información

    Actualiza Información

  • Uso de Interlocked

    Hilo A Hilo BRecurso comprtido

    int = 0

    Interlocked.Increment()

    1

    Interlocked.Increment()

    Espera

    2

  • Instrucción lock

    lock (this){

    int temp = counter;temp++;...counter = temp;

    }

    Para funciones de instancia normalmente se usa thisPara funciones estáticas typeof(clase)

  • MonitoresHilo A Monitor Hilo B

    Enter()

    Wait()

    Enter()

    Espera()

    Pulse()

    Exit()Exit()

  • Componentes

  • Uso de componentesReutilización del códigoUtilización del concepto de capas

    Interfaz de usuarioReglas del negocioBase de datos

    Facilita la distribución de las aplicaciones

  • Componentes

    Componente

    System.ComponentModel.

    Component

    Componente

    IComponent

  • Inicialización de componentes

    Inicialización de Clase

    Mediante una constructora estática

    class ADrawing { static Font m_referenceFont = new Font("TimesNewRoman", 14); // Simply add the static keyword to create a static constructor. // Static constructors do not have any parameters. static ADrawing() {

    // There is no call to the base class's static constructor. // Code to initialize the font here.

    } }

  • Inicialización de instancia

    class AShape { private int m_answer = 42; // Forward to another constructor. public AShape() :

    this(System.Drawing.Color.Red, 5280, DefinedSizes.Large) {

    // Additional initialization goes here. } public AShape(Color color, int length, DefinedSizes size) {

    // Code to initialize the class goes here. }

    }

  • Disposición de recursos

    public override void Dispose() {

    mywidget.Dispose(); mywidget = null; // Dispose of remaining objects.

    }

  • ASP.NET

  • HTML

    Es un lenguaje de marcado de textoUtiliza http (Hyper Text TransferProtocol)Se puede compartir información en diferentes plataformasUtiliza eficientemente en ancho de bandaEs difícil manejar contenido dinámico

  • CGI (Common Getway Interphase)

    Son programas ejecutables el el servidor WebEscriben texto Html en su salida estandarTienen capacidad

    Acceso a base de datosAcceso al registro del sistema

    Se puede usar cualquier lenguaje de programación (Perl, Delphi, C, C++, etc)Se coloca el ejecutable en el directorio adecuado

  • CGIC:\Inetpub\wwwroot\DirApp\Prog.exe

    #include "stdafx.h"#include

    int main(int argc, char* argv[]){

    printf("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n");printf("\r\n");printf("Hola Mundo CGI\r\n");printf("\r\nHola Mundo CGI");printf("
    \r\n\r\n");printf("\r\n");return 0;

    }

  • Limitacions de CGI

    Cada solicitud se crea un nuevo proceso en la memoria del servidorAl terminar su trabajo el programa se descargaNo es posible tener escalabilidad de las aplicaciones

  • ISAPI (Internet Server ApplicationProgram Interface)

    Utiliza DLL’s en vez de ejecutablesSe manejan dos tipos de DLL’s

    Extensiones ISAPISe invocan en una URLPueden tener parámetros

    Filtros ISAPINo se invocan directamente179Los invoca ISAPI para atender eventosUsos

    Autenticación de clientesModificación del HTML que se envía a los clientes

  • ISAPIC:\Inetpub\wwwroot\SayHelloISAPI\SayHelloISAPI.dll

  • ISAPIPuntos de entrada de la dll

    GetExtensionVersionHTTPExtensionProc

    FuncionesStartContent

    Escribe las etiquetas y WriteTitle

    Invoca a GetTitle y genera Y EndContent

    Genera etiquetas y Default

    Invoca a las anteriores y genera el texto visible

  • ISAPIVentajas

    El código se carga una sola vez para atender a todas las peticionesSe ejecuta en el espacio de IISSe pueden cargar en otro espacio de direccionesPueden recibir parámetros para realizar diferentes funciones

    DesventajasEs difícil independizar el código del diseño

  • ASP (Active Server Pages)

    Se basa en ISAPI para convertir secuencias de comandos en HTMLIIS mantiene una lista de las dll’s que atienden las peticiones de acuerdo a su extensiónLas páginas contienen

    Texto HTMLTexto VBScript, JavaScript o C#

  • ASPVentajas

    Facilita la creación dinámica de páginasSe tiene acceso a bases de datos (ADO)Simplifica el ciclo de desarrollo

    DesventajasDificulta separar la presentación de la lógica de procesamientoHay un cambio de contexto cada vez que se entra a una sección de comandos

  • ASP:NET

  • ASP.NET

    Es un nuevo productoPermite utilizar las capacidades de los desarrolladoresEntorno de ejecución de .NETUso de lenguajes compiladosUso de componentes .NETFormularios WebUtilización de ADO.NET

  • ASP.NET

    Las páginas son generadas dinámicamente en el servidorSe crean páginas con el contenido estático y con C# se genera el contenido dinámico

  • Generación Dinámica

    Servidor

    HTMLestático

    Código C#

    Páginagenerada

    Cliente

  • Desarrollo de ASP.NETEdición

    Prueba

    Compilación

  • Aplicación Web

    WebForm.aspx.csWebForm.aspx

    WebForm1

  • Manejo de eventos

    Los controles provocan eventosLos eventos son manejados por delegados

    Regresan voidTienen dos argumentos

    El objeto que provocó el eventoUn derivado de EventArgs

    Se ejecutan en el servidor (viaje redondo)

  • Postback

    Eventos PostbackLa forma es enviada al servidorTipicamente click en un botón

    Eventos no PostbackSon atendidos hasta que ocurre un evento PostbackSe pueden forzar a Postback

  • Estado

    Las aplicaciones Web son sin estadoASP.NET proporciona mecanismos para preservar el estadoEs posible preservar el estado de los controles en un viaje redondo al servidor

  • Ciclo de vida

    InitializeSe realizan la inicializaciones necesarias

    Load View StateSe define la propiedad ViewState de los controles. Permite la persistencia de la información

    Process Postback DataLos datos enviados por el cliente son procesados en el servidor

  • Ciclo de vidaLoad

    Se crean e inicializan los controlesEl estado es restaurado

    Send Postback Change ModificationSi hay cambios de estado se invoca la función RaisePostDataChangeEvent()

    Handle Postback EventSe atiende el evento que provocó el cliente

  • Ciclo de vidaPreRender

    Se produce justo antes de desplegar la página en el cliente

    Save StateSe salva el estado de los controles

    RenderSe atiende cuando la página es enviada al cliente

    DisposeLimpieza final

  • Estado de Aplicación

    System.Web.UI.Page

    ApplicationSession

    •Application y Session son coleccionesde objetos

    •Los objetos de Application se comparten por todas las sesiones de la misma apli-cación.

    •Los objetos almacenados en Session sehacen persistentes para la sesión.

  • Servicios Web XML

    Son componentes de software que proporcionan servicios a través de la WebUtilizan XMLDeben ser compatibles con SOAP (Simple Object Access Protocol)

  • Manejadores y módulos HTTP

    Son similares a extesniones y filtros ISAPISe utilizan

    Cuando se requiere alto rendimientoSe requiere la flexibilidad de filtros y estensiones

    InteroperabilidadLa naturaleza del problemaAplicaciones IndependientesArquitectura de aplicaciones integradasArquitectura IntegradaHardwareMidleware en el principioInternetRPC’sAcceso a base de datosProceso remoto de SQLProcedimientos catalogadosRequerimientos EmpresarialesMiddleware de componentesTransaccionalesArquitectura de tres capascon COM+Contenedor COM+Introducción a .Net.NET FrameworkPorque .NetPorque .NetPorque .NetCompiladoresMódulo administradoMetadatosEnsamblesEnsamblesCarga y ejecuciónIntroducción a C#Hola MundoTipos de datosAsignación de memoriaTipos de datos básicosTipos de datos básicosConversión de tipos básicosConstantesEnumeradoresUso de enumeradoresFormas de controlDefinición de clasesModificadores de accesoModificadores de accesoConstructorasUso de constructoraInicializadoresCostructores de copiaConstructores estáticosDestrucción de objetosPaso de parámetrosSobrecargaPropiedadesHerenciaPolimorfismoPolimorfismoClases abstractasLa clase ObjectBoxingUnboxingSobrecarga de operadoresOperadores de conversiónStructsInterfacesDeclaración de interfacesUso de la interfazInterfacesOperadores is y asArreglosArreglos rectangularesArreglos dentadosIndexersInterfaces de colecciónIEnumerableICollection : IEnumerableArrayListTarea 1StringStringBuilderExcepcionesExcepcionesInstrucción throwAtrapando excepcionesExcepciones específicasClase ExceptionExcepciones de usuarioRelanzamientoDelegados y eventosDelegadosDelegados propiedadesArreglos de delegadosMulticastingEventosEventosADO.NetCaracterísticasProveedores .NETClases conectadas y deconectadasConnectionConnectionCommandCommandDataAdapterDataReaderDataTableTransactionParameter ObjectDataColumn ObjectConstraint ObjectForeignKeyConstraintDataRow ObjectDataSet ObjectDataRelation ObjectDataRelationDataView ObjectVersión de una filaEstado de las filasEjemplo del estadoActualizaciónTexto para UpdateTexto para InsertTexto para DeleteUso de timestampProcedimientos catalogadosProcedimientos catalogadosRecuperación de valoresProc UpdateProc InsertCurrencyManagerConjuntos de datoscon tiposCrear un conjunto de datos con tiposAtributosAplicar un atributoDefinición de atributosSujetos de los atributosReflexiónMetadatosReflexiónUsos de reflexiónClases de ReflectionEnlazado tardíoMétodos estáticosProcesamiento RemotoCarga de CLRDominio de aplicaciónDominios de aplicaciónDominio de aplicaciónMarshalingHilos de ejecuciónDescarga de un dominioAplicaciones Consola o WindowsContextosTipo de ObjetosObjetos ligados y ágilesDefinición del contextoTipos de servidorServidor con interfacesHilos de ejecuciónHilos de ejecuciónCreación de una hilo de ejecuciónEspera de HilosSuspensión de hilosSincronizaciónUso de InterlockedInstrucción lockMonitoresComponentesUso de componentesComponentesInicialización de componentesInicialización de instanciaDisposición de recursosASP.NETHTMLCGI (Common Getway Interphase)CGILimitacions de CGIISAPI (Internet Server Application Program Interface)ISAPIISAPIISAPIASP (Active Server Pages)ASPASP:NETASP.NETASP.NETGeneración DinámicaDesarrollo de ASP.NETAplicación WebManejo de eventosPostbackEstadoCiclo de vidaCiclo de vidaCiclo de vidaEstado de AplicaciónServicios Web XMLManejadores y módulos HTTP