Exportar (0) Imprimir
Expandir todo

ObjectDataSource (Clase)

Representa un objeto comercial que proporciona datos a los controles enlazados a datos en las arquitecturas de aplicaciones Web multi-nivel.

Espacio de nombres: System.Web.UI.WebControls
Ensamblado: System.Web (en system.web.dll)

public class ObjectDataSource : DataSourceControl
public class ObjectDataSource extends DataSourceControl
public class ObjectDataSource extends DataSourceControl
No aplicable.

El objeto ObjectDataSource es un control de origen de datos de ASP.NET que representa un objeto de nivel medio orientado a datos o un objeto de interfaz de datos con controles enlazados a datos. Puede usar el control ObjectDataSource junto con un control enlazado a datos para presentar, editar y ordenar datos de una página Web que contenga poco código o no lo contenga.

NotaNota:

Si no está familiarizado con las características de acceso a datos en ASP.NET 2.0, debe leer alguno de estos temas antes de continuar:

Una práctica de diseño de aplicaciones bastante habitual consiste en separar la capa de presentación de la lógica empresarial y encapsular ésta en objetos comerciales. Estos objetos comerciales forman una capa aparte entre la capa de presentación y el nivel de datos, lo que produce una arquitectura de aplicación de tres niveles. El control ObjectDataSource permite a los desarrolladores utilizar un control de origen de datos de ASP.NET y a la vez retener su arquitectura de aplicación de tres niveles.

El control ObjectDataSource utiliza la reflexión para crear instancias de objetos comerciales y para llamar a los métodos que contienen para recuperar, actualizar, insertar y eliminar datos. La propiedad TypeName identifica el nombre de la clase con la que trabaja ObjectDataSource. El control ObjectDataSource crea y destruye una instancia de la clase por cada llamada a un método; no mantiene el objeto en la memoria durante el periodo de duración de la solicitud Web. Esto supone una consideración importante si el objeto comercial que se utiliza requiere muchos recursos o si resulta, por otra parte, caro de crear y destruir. Puede que el uso de un objeto caro no sea la mejor opción de diseño, pero permite controlar la duración del objeto por medio de los eventos ObjectCreating, ObjectCreated y ObjectDisposing.

NotaNota:

Los métodos identificados por las propiedades SelectMethod, UpdateMethod, InsertMethod y DeleteMethod pueden ser métodos de instancia o métodos static (Shared en Visual Basic). Si los métodos son static (Shared en Visual Basic), no se crea una instancia del objeto comercial ni se provocan los eventos ObjectCreating, ObjectCreated y ObjectDisposing.

Para recuperar los datos de un objeto comercial, establezca la propiedad SelectMethod con el nombre del método que recupera los datos. Si el método no devuelve un objeto IEnumerable o DataSet, el motor en tiempo de ejecución incluye el objeto en una colección IEnumerable. Si la firma del método tiene parámetros, puede agregar objetos Parameter a la colección SelectParameters y después enlazarlos a los valores que desee pasar al método que especifica la propiedad SelectMethod. Para que ObjectDataSource utilice los parámetros, éstos deben coincidir con los nombres y tipos de los parámetros de la firma del método.

El control ObjectDataSource recupera los datos cada vez que se llama al método Select. Este método proporciona el acceso mediante programación al método especificado por la propiedad.SelectMethod. Los controles enlazados a ObjectDataSource llaman automáticamente al método especificado por la propiedad SelectMethod cuando se llama a su método DataBind. Si establece la propiedad DataSourceID de un control enlazado a datos, el control se enlaza automáticamente a los datos del origen de datos, según sea necesario. El método recomendado para enlazar un control ObjectDataSource a un control enlazado a datos consiste en establecer la propiedad DataSourceID. Como alternativa, puede establecer la propiedad DataSource, pero entonces debe llamar explícitamente al método DataBind del control enlazado a datos. Para recuperar los datos puede llamar al método Select mediante programación en cualquier momento.

Para obtener más información acerca de cómo enlazar controles enlazados a datos a controles de origen de datos, vea Establecer enlaces a datos utilizando un control de origen de datos.

Dependiendo de las funciones del objeto comercial con el que trabaje el control ObjectDataSource, puede realizar operaciones de datos tales como la actualización, inserción y eliminación. Para realizar estas operaciones, establezca el nombre de método adecuado y cualquier parámetro asociado para la operación que desee realizar. Por ejemplo, para una operación de actualización, establezca la propiedad UpdateMethod en el nombre del método de objeto comercial que efectué actualizaciones y agregue los parámetros necesarios a la colección UpdateParameters. Si el control ObjectDataSource se asocia a un control enlazado a datos, este control agrega los parámetros. En este caso, debe garantizar que los nombres de los parámetros del método coincidan con los nombres de los campos del control enlazado a datos. La actualización se realiza cuando se llama al método Update, ya sea de manera explícita mediante código o automática mediante un control enlazado a datos. Se sigue el mismo modelo general para las operaciones Delete y Insert. Se supone que los objetos comerciales realizan las operaciones de datos de este tipo de registro en registro, en lugar de hacerlo por lotes.

El control ObjectDataSource puede filtrar los datos recuperados por la propiedad SelectMethod, si los datos se devuelven como un objeto DataSet o DataTable. El control ObjectDataSource permite almacenar en memoria caché datos de todos los tipos, aunque no es conveniente almacenar en caché aquellos objetos que conservan recursos o estados que no pueden compartirse para atender varias solicitudes (por ejemplo, un objeto SqlDataReader abierto), puesto que esta misma instancia del objeto se utilizará para atender varias solicitudes. Puede establecer la propiedad FilterExpression en una expresión de filtrado, utilizando una sintaxis de cadena de formato y enlazando los valores de la expresión a parámetros especificados en la colección FilterParameters.

Aunque ObjectDataSource no conserva la instancia del objeto comercial entre varias solicitudes, puede almacenar en memoria caché el resultado de la propiedad SelectMethod. Mientras los datos estén almacenados en caché, las llamadas posteriores al método Select devolverán los datos de la caché, en lugar de crear el objeto comercial y llamar a su propiedad SelectMethod mediante reflexión. El almacenamiento en caché permite evitar crear el objeto y llamar a su método de datos a expensas de la memoria del servidor Web. El objeto ObjectDataSource almacena automáticamente los datos en memoria caché cuando la propiedad EnableCaching está establecida en true y la propiedad CacheDuration está establecida en el número de segundos durante los cuales la memoria caché almacena datos antes de descartarse la caché. También puede especificar una propiedad CacheExpirationPolicy y una propiedad SqlCacheDependency opcional.

En la tabla siguiente se describen las características del control ObjectDataSource.

Función

Requisitos

Selección

Establezca la propiedad SelectMethod en el nombre del método de objeto comercial que selecciona los datos e incluya todos los parámetros necesarios en la colección SelectParameters, ya sea mediante programación o con un control enlazado a datos.

Ordenación

Establezca la propiedad SortParameterName en el nombre del parámetro del método SelectMethod que lleva los criterios de ordenación.

Filtrado

Establezca la propiedad FilterExpression en una expresión de filtrado y, de forma opcional, agregue los parámetros necesarios a la colección FilterParameters para filtrar los datos cuando se llame al método Select. El método especificado por la propiedad SelectMethod debe devolver DataSet o DataTable.

Paginación

Se admite la paginación del origen de datos si el método SelectMethod contiene los parámetros del número máximo de registros que se recuperan y el índice del primer registro a recuperar. Los nombres de estos parámetros deben establecerse en las propiedades MaximumRowsParameterName y StartRowIndexParameterName respectivamente. Un control enlazado a datos podría realizar la paginación por sí mismo, incluso si el control ObjectDataSource no admite la paginación directamente en el método especificado por la propiedad SelectMethod. Para que el control enlazado a datos pueda hacerlo, se requiere que el método especificado por la propiedad SelectMethod devuelva un objeto que implemente la interfaz Icollection.

Actualización

Establezca la propiedad UpdateMethod en el nombre del método de objeto comercial que actualiza los datos e incluya todos los parámetros necesarios en la colección UpdateParameters.

Eliminación

Establezca la propiedad DeleteMethod en el nombre del método de objeto comercial o la función que elimina los datos e incluya todos los parámetros necesarios en la colección DeleteParameters.

Inserción

Establezca la propiedad InsertMethod en el nombre del método de objeto comercial o la función que inserta los datos e incluya todos los parámetros necesarios en la colección InsertParameters.

Almacenamiento en caché

Establezca la propiedad EnableCaching en true y las propiedades CacheDuration y CacheExpirationPolicy según el comportamiento del almacenamiento en caché que desee para los datos almacenados en memoria caché.

Como todos los controles de origen de datos, el control ObjectDataSource se asocia a una clase de vista de origen de datos. Aunque el control ObjectDataSource es la interfaz que usa el desarrollador de páginas para trabajar con los datos, la clase ObjectDataSourceView es la interfaz con la que trabajan los controles enlazados a datos. Además, la clase ObjectDataSourceView describe las funciones del control de origen de datos y realiza el trabajo concreto. El control ObjectDataSource sólo tiene un objeto ObjectDataSourceView asociado y siempre se denomina DefaultView. Aunque el método GetView expone el objeto ObjectDataSourceView, muchos de sus métodos y propiedades están contenidos en el control ObjectDataSource y son expuestos directamente por él. En segundo plano, el objeto ObjectDataSourceView realiza todas las operaciones de datos, incluidas recuperar, insertar, actualizar, eliminar, filtrar y ordenar los datos. Para obtener más información, vea ObjectDataSourceView.

No se produce una representación visual del control ObjectDataSource; se implementa como un control para permitir crearlo de forma declarativa y, de forma opcional, permitir que participe en la administración de estados. Como resultado, ObjectDataSource no admite características visuales como las propiedades EnableTheming o SkinID.

TemaUbicación
Tutorial: Enlace de datos en páginas Web con un componente de datos de Visual StudioGenerar aplicaciones Web ASP .NET en Visual Studio
Tutorial: Enlace de datos a un objeto comercial personalizadoGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Enlazar a los datos de un control con plantillaGenerar aplicaciones Web ASP .NET
Cómo: Enlazar a los datos de un control con plantilla en Visual StudioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Proteger cadenas de conexión al utilizar controles de orígenes de datosGenerar aplicaciones Web ASP .NET
Cómo: Proteger cadenas de conexión al utilizar controles de orígenes de datos (Visual Studio)Generar aplicaciones Web ASP .NET en Visual Studio
Cómo: Agregar controles Repeater de servidor Web a una página de formularios Web Forms (Visual Studio)Generar aplicaciones Web ASP .NET en Visual Studio
Tutorial: Enlace de datos en páginas Web con un componente de datos de Visual StudioGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Proteger cadenas de conexión al utilizar controles de origen de datosGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Agregar controles Repeater de servidor web a una página de formularios Web FormsGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Enlazar a los datos de un control con plantillaGenerar aplicaciones Web ASP .NET en Visual Studio
Tutorial: Enlace de datos a un objeto comercial personalizadoGenerar aplicaciones Web ASP .NET en Visual Studio
Cómo: Enlazar a los datos de un control con plantilla en Visual StudioGenerar aplicaciones Web ASP .NET en Visual Studio

Esta sección contiene dos ejemplos de código. En el primer ejemplo de código se muestra cómo un control GridView puede presentar datos utilizando un objeto ObjectDataSource en una página de formularios Web Forms. El segundo ejemplo de código proporciona un ejemplo de objeto comercial de nivel medio que se usa en este y muchos otros ejemplos de código de ObjectDataSource.

En el ejemplo de código siguiente se muestra cómo un control GridView puede presentar datos utilizando un control ObjectDataSource en una página de formularios Web Forms. El objeto ObjectDataSource identifica el nombre de clase parcial o completo de un objeto comercial, con su propiedad TypeName y un método de objeto comercial al que se llama para recuperar datos con su propiedad SelectMethod. En tiempo de ejecución, se crea el objeto y se llama al método utilizando la reflexión. El control GridView enumera la colección IEnumerable que devuelve la propiedad SelectMethod y muestra los datos.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.CS.EmployeeLogic" />

    </form>
  </body>
</html>

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VJ# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetAllEmployees"
          typename="Samples.AspNet.JSL.EmployeeLogic" />

    </form>
  </body>
</html>

En el ejemplo de código siguiente se proporciona un ejemplo de objeto comercial de nivel medio que se usa en este y muchos otros ejemplos de código de ObjectDataSource. El ejemplo de código está compuesto por las dos clases básicas siguientes:

  • La clase EmployeeLogic, que es una clase sin estado que encapsula la lógica comercial.

  • La clase NorthwindEmployee, una clase de modelo que sólo contiene las funciones básicas que son necesarias para cargar y conservar datos del nivel de datos.

Se proporciona una clase NorthwindDataException adicional de utilidad.

Este conjunto de clases de ejemplo trabaja con la base de datos Northwind Traders, que está disponible con Microsoft SQL Server y Microsoft Access. Para obtener un ejemplo funcional completo, se deben compilar y utilizar estas clases con los ejemplos de código de formularios Web Forms proporcionados.

Este ejemplo ha sido diseñado para ofrecer una demostración sencilla y fácil de seguir de uno de los modos de interacción más habituales de los objetos comerciales con un control ObjectDataSource. No es una recomendación de diseño. En algunos ejemplos se agregan otros métodos a la clase EmployeeLogic o NorthwindEmployee o bien se efectúan modificaciones en este conjunto de clases para ofrecer una demostración de conceptos fundamentales.

namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Collections.Specialized;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations one can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList al = new ArrayList();

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

      SqlDataSource sds
        = new SqlDataSource(cts.ConnectionString, "SELECT EmployeeID FROM Employees");

      try {

        IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty);

        // Iterate through the Enumeration and create a
        // NorthwindEmployee object for each ID.
        foreach (DataRowView row in IDs) {
          string id = row["EmployeeID"].ToString();
          NorthwindEmployee nwe = new NorthwindEmployee(id);
          // Add the NorthwindEmployee object to the collection.
          al.Add(nwe);
        }
      }
      finally {
        // If anything strange happens, clean up.
        sds.Dispose();
      }

      return al;
    }
    public static NorthwindEmployee GetEmployee(object anID) {
      return new NorthwindEmployee(anID);
    }

    public static void UpdateEmployeeInfo(NorthwindEmployee ne) {
      bool retval = ne.Save();
      if (! retval) { throw new NorthwindDataException("UpdateEmployee failed."); }
    }

    public static void DeleteEmployee(NorthwindEmployee ne) { }

  }

  public class NorthwindEmployee {

    public NorthwindEmployee () {
      ID = DBNull.Value;
      lastName = "";
      firstName = "";
      title="";
      titleOfCourtesy = "";
      reportsTo = -1;
    }

    public NorthwindEmployee (object anID) {
      this.ID = anID;

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

		SqlConnection conn = new SqlConnection (cts.ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " +
                       " FROM Employees " +
                       " WHERE EmployeeID = @empId",
                       conn);
      // Add the employee ID parameter and set its value.
      sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString());
      SqlDataReader sdr = null;

      try {
        conn.Open();
        sdr = sc.ExecuteReader();

        // This is not a while loop. It only loops once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName        = sdr["FirstName"].ToString();
          this.lastName         = sdr["LastName"].ToString();
          this.title            = sdr["Title"].ToString();
          this.titleOfCourtesy  = sdr["TitleOfCourtesy"].ToString();
          if (! sdr.IsDBNull(4)) {
            this.reportsTo        = sdr.GetInt32(4);
          }
        }
        else {
          throw new NorthwindDataException("Data not loaded for employee id.");
        }
      }
      finally {
        try {
          if (sdr != null) sdr.Close();
          conn.Close();
        }
        catch (SqlException) {
          // Log an event in the Application Event Log.
          throw;
        }
      }
    }

    private object ID;

    private string lastName;
    public string LastName {
      get { return lastName; }
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      get { return firstName; }
      set { firstName = value;  }
    }

    private string title;
    public String Title {
      get { return title; }
      set { title = value; }
    }

    private string titleOfCourtesy;
    public string Courtesy {
      get { return titleOfCourtesy; }
      set { titleOfCourtesy = value; }
    }

    private int    reportsTo;
    public int Supervisor {
      get { return reportsTo; }
      set { reportsTo = value; }
    }

    public bool Save () {
      return true;
    }
  }

  internal class NorthwindDataException: Exception {
    public NorthwindDataException(string msg) : base (msg) { }
  }
}

package  Samples.AspNet.JSL; 

import System.*;
import System.Collections.*;
import System.Collections.Specialized.*;
import System.Configuration.*;
import System.Data.*;
import System.Data.SqlClient.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;
   
//
// EmployeeLogic is a stateless business object that encapsulates
// the operations one can perform on a NorthwindEmployee object.
//
public class EmployeeLogic
{
    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees()
        throws NorthwindDataException, SqlException
    {
        ArrayList al = new ArrayList();

        ConnectionStringSettings cts = 
            ConfigurationManager.get_ConnectionStrings().get_Item("NorthwindConnection");

		
        SqlDataSource sds =
            new SqlDataSource(cts.get_ConnectionString(), "SELECT EmployeeID FROM Employees");

        try {
            IEnumerable ids = sds.Select(DataSourceSelectArguments.get_Empty());

            // Iterate through the Enumeration and create a
            // NorthwindEmployee object for each id.
            IEnumerator enumerator = ids.GetEnumerator();
            while (enumerator.MoveNext()) {
                // The IEnumerable contains DataRowView objects.
                DataRowView row = (DataRowView)enumerator.get_Current();
                String id = row.get_Item("EmployeeID").ToString();
                NorthwindEmployee nwe = new NorthwindEmployee(id);
                // Add the NorthwindEmployee object to the collection.
                al.Add(nwe);
            }
        }
        finally {
            // If anything strange happens, clean up.
            sds.Dispose();
        }

        return al;
    } //GetAllEmployees

    public static NorthwindEmployee GetEmployee(Object anId)
        throws NorthwindDataException, SqlException
    {
        return new NorthwindEmployee(anId);
    } //GetEmployee

    public static void UpdateEmployeeInfo(NorthwindEmployee ne)
        throws NorthwindDataException, SqlException
    {
        boolean retval = ne.Save();
        if (!retval) {
            throw new NorthwindDataException("UpdateEmployee failed.");
        }
    } //UpdateEmployeeInfo

    public static void DeleteEmployee(NorthwindEmployee ne)
    {
    } //DeleteEmployee 
} //EmployeeLogic

public class NorthwindEmployee
{
    public NorthwindEmployee()
    {
        id = DBNull.Value;
        lastName = "";
        firstName = "";
        title = "";
        titleOfCourtesy = "";
        reportsTo = -1;
    } //NorthwindEmployee

    public NorthwindEmployee(Object anId)
        throws NorthwindDataException, SqlException
    {
        this.id = anId;

        ConnectionStringSettings cts = 
	    ConfigurationManager.get_ConnectionStrings().get_Item("NorthwindConnection");
	SqlConnection conn = new SqlConnection(cts.get_ConnectionString());
        SqlCommand sc = new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo" +
            " FROM Employees " +
            " WHERE EmployeeID = @empId",
            conn);
        // Add the employee ID parameter and set its value.
        sc.get_Parameters().Add(new SqlParameter("@empId", SqlDbType.Int)).
            set_Value((Int32)Int32.Parse(anId.ToString()));
        SqlDataReader sdr = null;

        try {
            conn.Open();
            sdr = sc.ExecuteReader();
            // This is not a while loop. It only loops once.
            if (sdr != null && sdr.Read()) {
                // The IEnumerable contains DataRowView objects.
                this.firstName = sdr.get_Item("FirstName").ToString();
                this.lastName = sdr.get_Item("LastName").ToString();
                this.title = sdr.get_Item("Title").ToString();
                this.titleOfCourtesy = sdr.get_Item("TitleOfCourtesy").
                    ToString();
                if (!(sdr.IsDBNull(4))) {
                    this.reportsTo = sdr.GetInt32(4);
                }
            }
            else {
                throw new NorthwindDataException("Data not loaded for employee id.");
            }
        }
        finally {
            try {
                if (sdr != null) {
                    sdr.Close();
                }
                conn.Close();
            }
            catch (SqlException exp) {
                // Log an event in the Application Event Log.
                throw exp;
            }
        }
    } //NorthwindEmployee

    private Object id;

    private String lastName;

    /** @property 
     */
    public String get_LastName()
    {
        return lastName;
    } //get_LastName

    /** @property 
     */
    public void set_LastName(String value)
    {
        lastName = value;
    } //set_LastName

    private String firstName;

    /** @property 
     */
    public String get_FirstName()
    {
        return firstName;
    } //get_FirstName

    /** @property 
     */
    public void set_FirstName(String value)
    {
        firstName = value;
    } //set_FirstName

    private String title;

    /** @property 
     */
    public String get_Title()
    {
        return title;
    } //get_Title

    /** @property 
     */
    public void set_Title(String value)
    {
        title = value;
    } //set_Title

    private String titleOfCourtesy;

    /** @property 
     */
    public String get_Courtesy()
    {
        return titleOfCourtesy;
    } //get_Courtesy

    /** @property 
     */
    public void set_Courtesy(String value)
    {
        titleOfCourtesy = value;
    } //set_Courtesy

    private int reportsTo;

    /** @property 
     */
    public int get_Supervisor()
    {
        return reportsTo;
    } //get_Supervisor

    /** @property 
     */
    public void set_Supervisor(int value)
    {
        reportsTo = value;
    } //set_Supervisor

    public boolean Save()
    {
        return true;
    } //Save
} //NorthwindEmployee

public class NorthwindDataException extends System.Exception
{
    public NorthwindDataException(String msg)
    {
         super(msg);
    } //NorthwindDataException
} //NorthwindDataException

System.Object
   System.Web.UI.Control
     System.Web.UI.DataSourceControl
      System.Web.UI.WebControls.ObjectDataSource

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft