Esporta (0) Stampa
Espandi tutto

Classe ObjectDataSource

Aggiornamento: novembre 2007

Rappresenta un oggetto business che fornisce dati ai controlli con associazione a dati in architetture di applicazioni Web a più livelli.

Spazio dei nomi:  System.Web.UI.WebControls
Assembly:  System.Web (in System.Web.dll)

[ToolboxBitmapAttribute(typeof(ObjectDataSource))]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class ObjectDataSource : DataSourceControl
/** @attribute ToolboxBitmapAttribute(ObjectDataSource) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public class ObjectDataSource extends DataSourceControl
public class ObjectDataSource extends DataSourceControl
<asp:ObjectDataSource />

L'oggetto ObjectDataSource è un controllo origine dati ASP.NET che rappresenta un oggetto di livello intermedio con supporto dati o un oggetto interfaccia dati nei controlli con associazione a dati. È possibile utilizzare il controllo ObjectDataSource insieme a un controllo con associazione a dati per visualizzare, modificare e ordinare dati in una pagina Web con una quantità ridotta di codice o senza codice.

È prassi molto comune nella progettazione di applicazioni separare il livello di presentazione dalla logica business e incapsulare tale logica in oggetti business. Questi oggetti costituiscono un livello distinto tra il livello di presentazione e quello dei dati, generando un'architettura dell'applicazione a tre livelli. Il controllo ObjectDataSource consente agli sviluppatori di utilizzare un controllo origine dati ASP.NET pur mantenendo la relativa architettura dell'applicazione a tre livelli.

Il controllo ObjectDataSource utilizza la reflection per creare istanze di oggetti business e per chiamarne i metodi per recuperare, aggiornare, inserire ed eliminare dati. La proprietà TypeName identifica il nome della classe utilizzata dall'oggetto ObjectDataSource. Il controllo ObjectDataSource crea ed elimina un'istanza della classe per ciascuna chiamata al metodo; non contiene l'oggetto in memoria per la durata della richiesta Web. Si tratta di un fattore importante se l'oggetto business utilizzato richiede numerose risorse o risulta dispendioso da creare ed eliminare. L'utilizzo di un oggetto dispendioso potrebbe non risultare una scelta di progettazione ottimale, tuttavia è possibile controllare il ciclo di vita dell'oggetto tramite gli eventi ObjectCreating, ObjectCreated e ObjectDisposing.

Nota:

I metodi identificati dalle proprietà SelectMethod, UpdateMethod, InsertMethod e DeleteMethod possono essere metodi di istanze o metodi static (Shared in Visual Basic). Se si tratta di metodi static (Shared in Visual Basic), non viene creata un'istanza dell'oggetto business e non vengono generati gli eventi ObjectCreating, ObjectCreated e ObjectDisposing.

Per recuperare dati da un oggetto business, impostare la proprietà SelectMethod con il nome del metodo che recupera i dati. Se il metodo non restituisce un oggetto IEnumerable o DataSet, l'oggetto viene incluso dal runtime in un insieme IEnumerable. Se la firma del metodo presenta parametri, è possibile aggiungere oggetti Parameter all'insieme SelectParameters e associarli ai valori che si desidera passare al metodo specificato dalla proprietà SelectMethod. Affinché l'oggetto ObjectDataSource utilizzi i parametri, questi devono corrispondere ai nomi e ai tipi di parametri nella firma del metodo. Per ulteriori informazioni vedere Utilizzo dei parametri con il controllo ObjectDataSource.

Il controllo ObjectDataSource recupera dati ad ogni chiamata del metodo Select. Questo metodo fornisce accesso a livello di codice al metodo specificato dalla proprietà SelectMethod. Il metodo specificato dalla proprietà SelectMethod viene chiamato automaticamente dai controlli associati all'oggetto ObjectDataSource quando viene chiamato il relativo metodo DataBind. Se viene impostata la proprietà DataSourceID di un controllo con associazione a dati, il controllo viene associato automaticamente ai dati dall'origine dati, come necessario. L'impostazione della proprietà DataSourceID è il metodo consigliato per associare un controllo ObjectDataSource a un controllo con associazione a dati. In alternativa, è possibile impostare la proprietà DataSource ma è necessario chiamare in modo esplicito il metodo DataBind del controllo con associazione a dati. È possibile chiamare il metodo Select a livello di codice in qualsiasi momento per il recupero dei dati.

Per ulteriori informazioni sull'associazione dei controlli con associazione a dati ai controlli origine dati, vedere Associazioni a dati tramite un controllo origine dati.

In base alle funzionalità dell'oggetto business utilizzato dal controllo ObjectDataSource, è possibile eseguire operazioni sui dati, ad esempio aggiornamenti, inserimenti ed eliminazioni. Per eseguire tali operazioni, impostare il nome del metodo appropriato e tutti i parametri associati per l'operazione che si desidera eseguire. Per un'operazione di aggiornamento ad esempio, impostare la proprietà UpdateMethod sul nome del metodo dell'oggetto business che esegue gli aggiornamenti e aggiungere i parametri richiesti all'insieme UpdateParameters. Se il controllo ObjectDataSource è associato a un controllo con associazione a dati, i parametri vengono aggiunti dal controllo con associazione a dati. In tal caso è necessario assicurarsi che i nomi di parametri del metodo corrispondano ai nomi campo nel controllo con associazione a dati. L'aggiornamento viene eseguito quando viene chiamato il metodo Update o in modo esplicito dal codice o automaticamente da un controllo con associazione a dati. Lo stesso modello generale viene seguito per le operazioni dei metodi Delete e Insert. Si presuppone che gli oggetti business eseguano questi tipi di operazioni sui dati in un record per volta anziché in batch.

Il controllo ObjectDataSource può filtrare i dati recuperati dalla proprietà SelectMethod, se questi vengono restituiti come oggetto DataSet o DataTable. Il controllo ObjectDataSource consente di memorizzare nella cache tutti i tipi di dati ma non devono essere memorizzati gli oggetti che mantengono le risorse o lo stato che non può essere condiviso in richieste multiple di servizio (ad esempio un oggetto SqlDataReader aperto), in quanto la stessa istanza dell'oggetto verrà utilizzata in tali richieste. È possibile impostare la proprietà FilterExpression su una stringa di filtro utilizzando una sintassi della stringa di formato e associare valori nell'espressione ai parametri specificati nell'insieme FilterParameters.

Pur non mantenendo l'istanza dell'oggetto business in più richieste, l'oggetto ObjectDataSource può memorizzare nella cache il risultato della proprietà SelectMethod. Mentre i dati sono memorizzati nella cache, le successive chiamate al metodo Select restituiscono i dati della cache anziché creare l'oggetto business e chiamare il relativo oggetto SelectMethod tramite reflection. La memorizzazione nella cache evita la creazione dell'oggetto e la chiamata del relativo metodo di dati a discapito della memoria sul server Web. L'oggetto ObjectDataSource memorizza automaticamente i dati nella cache quando la proprietà EnableCaching è impostata su true e la proprietà CacheDuration sul numero di secondi durante i quali la cache memorizza i dati prima che venga eliminata. È inoltre possibile specificare una proprietà CacheExpirationPolicy e una proprietà SqlCacheDependency facoltativa

Nella tabella riportata di seguito sono descritte le funzionalità del controllo ObjectDataSource.

Funzionalità

Requisiti

Selezione

Impostare la proprietà SelectMethod sul nome del metodo dell'oggetto business che seleziona i dati e includere i parametri necessari nell'insieme SelectParameters o a livello di codice o tramite un controllo con associazione a dati.

Ordinamento

Impostare la proprietà SortParameterName sul nome del parametro nel metodo SelectMethod che contiene i criteri di ordinamento.

Filtraggio

Impostare la proprietà FilterExpression su un'espressione di filtro e facoltativamente aggiungere i parametri all'insieme FilterParameters per filtrare i dati quando viene chiamato il metodo Select. Il metodo specificato dalla proprietà SelectMethod deve restituire un oggetto DataSet o DataTable.

Paging

Il paging di origine dati è supportato se il metodo SelectMethod contiene parametri per il numero massimo di record da recuperare e l'indice del primo record da recuperare. I nomi dei parametri devono essere impostati rispettivamente nelle proprietà MaximumRowsParameterName e StartRowIndexParameterName. Un controllo con associazione a dati può eseguire il paging anche se il controllo ObjectDataSource non supporta questa funzionalità direttamente nel metodo specificato dalla proprietà SelectMethod. Affinché il controllo con associazione a dati possa eseguire tale operazione è necessario che il metodo specificato dalla proprietà SelectMethod restituisca un oggetto che implementi l'interfaccia ICollection.

Aggiornamento

Impostare la proprietà UpdateMethod sul nome del metodo dell'oggetto business che aggiorna i dati e includere i parametri necessari nell'insieme UpdateParameters.

Eliminazione

Impostare la proprietà DeleteMethod sul nome della funzione o metodo dell'oggetto business che elimina i dati e includere i parametri necessari nell'insieme DeleteParameters.

Inserimento

Impostare la proprietà InsertMethod sul nome della funzione o metodo dell'oggetto business che inserisce i dati e includere i parametri necessari nell'insieme InsertParameters.

Memorizzazione nella cache

Impostare la proprietà EnableCaching su true e le proprietà CacheDuration e CacheExpirationPolicy secondo il comportamento della cache desiderato per i dati memorizzati nella cache.

Come con tutti i controlli origine dati, il controllo ObjectDataSource viene associato a una classe relativa alla visualizzazione origine dati. Pur essendo il controllo ObjectDataSource l'interfaccia che lo sviluppatore di pagine utilizza per operare con i dati, la classe ObjectDataSourceView è l'interfaccia utilizzata dai controlli con associazione a dati. Inoltre, la classe ObjectDataSourceView descrive le funzionalità del controllo origine dati ed esegue l'operazione effettiva. Il controllo ObjectDataSource dispone di un solo oggetto ObjectDataSourceView associato, denominato sempre DefaultView. Mentre l'oggetto ObjectDataSourceView viene esposto dal metodo GetView, molte delle relative proprietà e metodi sono inclusi ed esposti direttamente dal controllo ObjectDataSource. In modo implicito, l'oggetto ObjectDataSourceView esegue tutte le operazioni sui dati, inclusi recupero, inserimento, aggiornamento, eliminazione, filtraggio e ordinamento dei dati. Per ulteriori informazioni, vedere ObjectDataSourceView.

È possibile utilizzare il controllo ObjectDataSource con una classe LINQ to SQL. A tale scopo, impostare la proprietà TypeName sulla classe del contesto dati. Impostare inoltre i metodi SelectMethod, UpdateMethod, InsertMethod e DeleteMethod sui metodi nella classe del contesto dati che eseguono le operazioni corrispondenti. È necessario creare un gestore per l'evento ObjectDisposing per annullare l'eliminazione della classe del contesto dati. Questo passaggio è necessario perché LINQ to SQL supporta l'esecuzione posticipata, mentre il controllo ObjectDataSource cerca di eliminare il contesto dati dopo l'operazione Select. Per ulteriori informazioni sulla creazione delle classi LINQ to SQL, vedere Procedura: creare classi LINQ to SQL in un'applicazione Web. Per un esempio di come annullare l'eliminazione della classe del contesto dati, vedere l'evento ObjectDisposing.

Per il controllo ObjectDataSource non è disponibile il rendering visivo. Viene implementato come controllo, pertanto può essere creato in modo dichiarativo e può anche essere impostato in modo da prendere parte alla gestione dello stato. Di conseguenza, l'oggetto ObjectDataSource non supporta funzionalità visive, ad esempio la proprietà EnableTheming o SkinID.

TopicLocation
Procedura dettagliata: associazione ai dati a un oggetto business personalizzatoGenerazione di applicazioni Web ASP.NET in Visual Studio
Procedura dettagliata: pagine Web con associazione ai dati a un componente dati di Visual StudioGenerazione di applicazioni Web ASP.NET in Visual Studio
Procedura: proteggere le stringhe di connessione quando si utilizzano controlli dell'origine dati (Visual Studio)Generazione di applicazioni Web ASP.NET in Visual Studio
Procedura: aggiungere controlli server Web Repeater a una pagina Web Form (Visual Studio)Generazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione ai dati in un controllo basato su modello in Visual StudioGenerazione di applicazioni Web ASP.NET in Visual Studio
Procedura dettagliata: pagine Web con associazione ai dati a un componente dati di Visual StudioCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: proteggere le stringhe di connessione durante l'utilizzo dei controlli origine datiCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: aggiungere controlli server Web Repeater a una pagina Web FormCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione dati in un controllo basato su modelloCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura dettagliata: associazione ai dati a un oggetto business personalizzatoCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione ai dati in un controllo basato su modello in Visual StudioCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione dati in un controllo basato su modelloGenerazione di applicazioni Web ASP.NET
Procedura: proteggere le stringhe di connessione durante l'utilizzo dei controlli origine datiGenerazione di applicazioni Web ASP.NET
Procedura dettagliata: pagine Web con associazione ai dati a un componente dati di Visual StudioCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: proteggere le stringhe di connessione durante l'utilizzo dei controlli origine datiCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: aggiungere controlli server Web Repeater a una pagina Web FormCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione dati in un controllo basato su modelloCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura dettagliata: associazione ai dati a un oggetto business personalizzatoCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: eseguire l'associazione ai dati in un controllo basato su modello in Visual StudioCompilazione di applicazioni Web ASP.NET in Visual Studio

In questa sezione sono inclusi due esempi di codice. Nel primo esempio di codice viene illustrato il modo in cui un controllo GridView può visualizzare i dati utilizzando un oggetto ObjectDataSource in una pagina Web ASP.NET. Nel secondo esempio di codice viene fornito un esempio di oggetto business di livello intermedio utilizzato da questo e da molti altri esempi di codice ObjectDataSource.

Nell'esempio di codice riportato di seguito viene illustrato il modo in cui un controllo GridView può visualizzare i dati utilizzando un controllo ObjectDataSource su una pagina Web Form. L'oggetto ObjectDataSource identifica il nome di classe parziale o completo di un oggetto business con la relativa proprietà TypeName e un metodo dell'oggetto business chiamato per recuperare dati con la relativa proprietà SelectMethod. In fase di esecuzione, l'oggetto viene creato e il metodo viene chiamato tramite reflection. Il controllo GridView esegue l'enumerazione attraverso l'insieme IEnumerable restituito dalla proprietà SelectMethod e visualizza i dati.

<%@ 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>


Nell'esempio di codice riportato di seguito viene fornito un esempio di oggetto business di livello intermedio utilizzato da questo e da molti altri esempi di codice ObjectDataSource. L'esempio di codice è dato dalle due seguenti classi base:

  • La classe EmployeeLogic, vale a dire una classe senza informazioni sullo stato che incapsula la logica business.

  • La classe NorthwindEmployee, vale a dire una classe modello che contiene soltanto la funzionalità di base richiesta per caricare e mantenere i dati dal livello dati.

Per praticità, viene fornita una classe NorthwindDataException aggiuntiva.

Questo insieme di classi di esempio utilizza il database Northwind Traders che è disponibile con Microsoft SQL Server e Microsoft Access. Per un esempio funzionante completo, è necessario compilare e utilizzare queste classi con gli esempi di codice Web Form forniti.

Questo esempio è progettato per essere semplice e facile da seguire e per illustrare uno dei modi più comuni con cui un oggetto business interagisce con un controllo ObjectDataSource. Non è un suggerimento per la progettazione. In alcuni esempi, metodi aggiuntivi vengono aggiunti alle classi EmployeeLogic o NorthwindEmployee o vengono apportate modifiche a questo insieme di classi per illustrare i concetti fondamentali.

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

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft