Remarque : cette classe est nouvelle dans le .NET Framework version 2.0.
Représente un objet métier qui fournit des données aux contrôles liés aux données dans des architectures multicouches d'application Web.
Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)
Visual Basic (Déclaration)
Public Class ObjectDataSource
Inherits DataSourceControl
Visual Basic (Utilisation)
Dim instance As ObjectDataSource
public class ObjectDataSource : DataSourceControl
public ref class ObjectDataSource : public DataSourceControl
public class ObjectDataSource extends DataSourceControl
public class ObjectDataSource extends DataSourceControl
ObjectDataSource est un contrôle de source de données ASP.NET qui représente un objet de couche intermédiaire lié aux bases de données ou un objet d'interface de données pour les contrôles liés aux données. Vous pouvez utiliser le contrôle ObjectDataSource conjointement à un contrôle lié aux données pour afficher, modifier et trier des données sur une page Web avec peu ou pas de code.
Une pratique de conception d'application très courante consiste à séparer la couche présentation de la logique métier et à encapsuler la logique métier dans les objets métier. Ces objets métier forment une couche distincte entre la couche présentation et la couche Données, constituant ainsi une architecture d'applications à trois couches. Le contrôle ObjectDataSource permet aux développeurs d'utiliser un contrôle de source de données ASP.NET tout en conservant leur architecture d'applications à trois couches.
Le contrôle ObjectDataSource utilise la réflexion pour créer des instances d'objets métier et appeler des méthodes sur ces objets afin de récupérer, mettre à jour, insérer et supprimer des données. La propriété TypeName identifie le nom de la classe fonctionnant avec ObjectDataSource. Le contrôle ObjectDataSource crée et détruit une instance de la classe pour chaque appel à une méthode ; il ne garde pas l'objet en mémoire pendant la durée de vie de la demande Web. Cela constitue un facteur important si l'objet métier que vous utilisez requiert beaucoup de ressources ou si sa création et sa destruction coûtent cher. L'utilisation d'un objet coûteux ne peut pas provenir d'un choix de conception optimal, mais vous pouvez contrôler le cycle de vie de l'objet à l'aide des événements ObjectCreating, ObjectCreated et ObjectDisposing.
Remarque |
|---|
| Les méthodes qui sont identifiées par les propriétés SelectMethod, UpdateMethod, InsertMethod et DeleteMethod peuvent être des méthodes d'instance ou des méthodes staticShared en Visual Basic). Si les méthodes sont static (Shared en Visual Basic), aucune instance de l'objet métier n'est créée et les événements ObjectCreating, ObjectCreated et ObjectDisposing ne sont pas déclenchés. |
Pour récupérer les données d'un objet métier, affectez à la propriété SelectMethod le nom de la méthode qui récupère les données. Si la méthode ne retourne pas d'objet IEnumerable ou DataSet, l'objet est encapsulé par l'exécution dans une collection IEnumerable. Si la signature de la méthode comporte des paramètres, vous pouvez ajouter des objets Parameter à la collection SelectParameters, puis les lier aux valeurs que vous souhaitez passer à la méthode spécifiée par la méthode SelectMethod. Pour que ObjectDataSource puisse utiliser les paramètres, ceux-ci doivent correspondre aux noms et types des paramètres dans la signature de la méthode.
Le contrôle ObjectDataSource récupère des données chaque fois que la méthode Select est appelée. Cette méthode fournit un accès par programme à la méthode spécifiée par la propriété SelectMethod. La méthode spécifiée par la propriété SelectMethod est appelée automatiquement par les contrôles liés au ObjectDataSource lorsque leur méthode DataBind est appelée. Si vous définissez la propriété DataSourceID d'un contrôle lié aux données, le contrôle crée automatiquement une liaison avec les données de la source de données, si nécessaire. La définition de la propriété DataSourceID est la méthode recommandée pour lier un contrôle ObjectDataSource à un contrôle lié aux données. Vous pouvez également définir la propriété DataSource, mais vous devrez ensuite appeler explicitement la méthode DataBind du contrôle lié aux données. Vous pouvez à tout moment appeler la méthode Select par programme pour récupérer des données.
Pour plus d'informations sur la liaison de contrôles liés aux données à des contrôles de source de données, consultez Liaison à des données à l'aide d'un contrôle de source de données.
Selon les fonctions de l'objet métier fonctionnant avec ObjectDataSource, vous pouvez exécuter des opérations de données, telles que des mises à jour, des insertions et des suppressions. Pour exécuter ces opérations de données, définissez le nom de méthode approprié et tous les paramètres associés pour l'opération que vous souhaitez exécuter. Par exemple, pour une opération de mise à jour, affectez à la propriété UpdateMethod le nom de la méthode de l'objet métier qui effectue des mises à jour et ajoutez tous les paramètres requis à la collection UpdateParameters. Si le contrôle ObjectDataSource est associé à un contrôle lié aux données, les paramètres sont ajoutés par le contrôle lié aux données. Dans ce cas, vous devez vous assurer que les noms de paramètres de la méthode correspondent aux noms des champs du contrôle lié aux données. La mise à jour est effectuée lorsque la méthode Update est appelée, soit explicitement par votre code ou automatiquement par un contrôle lié aux données. Les opérations Delete et Insert suivent le même modèle général. Les objets métier sont supposés exécuter ces types d'opérations de données dans chaque enregistrement de manière individuelle, plutôt que par lots.
Le contrôle ObjectDataSource peut filtrer les données récupérées par la propriété SelectMethod, si les données sont retournées en tant qu'objet DataSet, DataView ou DataTable. Le contrôle ObjectDataSource vous permet de mettre en cache tous les types de données, mais vous ne devez pas mettre en cache les objets qui conservent les ressources ou un état ne pouvant pas être partagés pour traiter plusieurs demandes (par exemple, un objet SqlDataReader ouvert), parce que cette même instance de l'objet sera utilisée pour traiter plusieurs demandes. Vous pouvez affecter une expression de filtrage à la propriété FilterExpression à l'aide d'une syntaxe de chaîne de format et de valeurs de liaison dans l'expression aux paramètres spécifiés dans la collection FilterParameters.
ObjectDataSource ne conserve pas l'instance de l'objet métier à travers plusieurs demandes, mais il peut mettre en cache le résultat de la méthode SelectMethod. Tandis que les données sont mises en cache, les appels suivants à la méthode Select retournent les données mises en cache au lieu de créer l'objet métier et appeler son SelectMethod à l'aide de la réflexion. La mise en cache vous permet d'éviter de créer l'objet et d'appeler sa méthode de données aux dépens de la mémoire du serveur Web ; il peut s'agir d'un bon compromis. ObjectDataSource met les données automatiquement en cache lorsque la propriété EnableCaching a la valeur true et lorsque la valeur de la propriété CacheDuration correspond au nombre de secondes pendant lesquelles le cache stocke les données avant d'être ignoré. Vous pouvez également spécifier une propriété CacheExpirationPolicy et éventuellement une propriété SqlCacheDependency.
Le tableau suivant décrit les fonctionnalités du contrôle ObjectDataSource.
| Fonction | Configuration requise |
| Sélection | Affectez à la propriété SelectMethod le nom de la méthode de l'objet métier qui sélectionne les données et incluez tous les paramètres nécessaires dans la collection SelectParameters, soit par programme ou en utilisant un contrôle lié aux données. |
| Tri | Affectez à la propriété SortParameterName le nom du paramètre dans la méthode SelectMethod qui retient les critères de tri. |
| Filtrage | Affectez à la propriété FilterExpression une expression de filtrage et ajoutez les paramètres éventuels à la collection FilterParameters pour filtrer les données lorsque la méthode Select est appelée. La méthode spécifiée par la propriété SelectMethod doit retourner un DataSet, DataView ou DataTable. |
| Pagination | La pagination de source de données est prise en charge si la méthode SelectMethod contient les paramètres pour le nombre maximal d'enregistrements à récupérer et l'index du premier enregistrement à récupérer. Les noms de ces paramètres doivent être définis dans les propriétés MaximumRowsParameterName et StartRowIndexParameterName respectivement. Un contrôle lié aux données peut exécuter la pagination lui-même, même si le contrôle ObjectDataSource ne prend pas en charge la pagination directement dans la méthode spécifiée par la propriété SelectMethod. Pour que le contrôle lié aux données puisse exécuter la pagination, la méthode spécifiée par la propriété SelectMethod doit retourner un objet qui implémente l'interface Icollection. |
| Mise à jour | Affectez à la propriété UpdateMethod le nom de la méthode de l'objet métier qui met les données à jour et incluez tous les paramètres nécessaires dans la collection UpdateParameters. |
| Suppression | Affectez à la propriété DeleteMethod le nom de la méthode ou de la fonction d'objet métier qui supprime les données et incluez tous les paramètres nécessaires dans la collection DeleteParameters. |
| Insertion | Affectez à la propriété InsertMethod le nom de la méthode ou de la fonction d'objet métier qui insère les données et incluez tous les paramètres nécessaires dans la collection InsertParameters. |
| Mise en cache | Affectez la valeur true à la propriété EnableCaching, et définissez les propriétés CacheDuration et CacheExpirationPolicy selon le comportement de mise en cache de votre choix pour vos données mises en cache. |
Comme tous les contrôles de source de données, le contrôle ObjectDataSource est associé à une classe d'affichage de la source de données. Le contrôle ObjectDataSource correspond à l'interface utilisée par le développeur de pages pour traiter les données, tandis que la classe ObjectDataSourceView correspond à l'interface avec laquelle les contrôles liés aux données fonctionnent. En outre, la classe ObjectDataSourceView décrit les fonctions du contrôle de source de données et exécute le travail réel. Le contrôle ObjectDataSource n'est associé qu'à un ObjectDataSourceView et est toujours nommé DefaultView. Tandis que l'objet ObjectDataSourceView est exposé par la méthode GetView, nombre de ses propriétés et méthodes sont encapsulées et exposées directement par le contrôle ObjectDataSource. En arrière-plan, l'objet ObjectDataSourceView exécute toutes les opérations de données, y compris la récupération, l'insertion, la mise à jour, la suppression, le filtrage et le tri des données. Pour plus d'informations, consultez ObjectDataSourceView.
Il n'y a pas de rendu visuel du contrôle ObjectDataSource ; il est implémenté comme un contrôle. Vous pouvez donc le créer de manière déclarative et lui permettre éventuellement de participer à la gestion d'état. Par conséquent, ObjectDataSource ne prend pas en charge les fonctionnalités visuelles, telles que la propriété EnableTheming ou SkinID.
Cette section comprend deux exemples de code. Le premier exemple de code illustre comment un contrôle GridView peut afficher des données à l'aide d'un objet ObjectDataSource sur une page Web Forms. Le deuxième exemple de code fournit un exemple d'objet métier de couche intermédiaire utilisé par cet exemple de code ObjectDataSource et de nombreux autres.
L'exemple de code suivant montre comment un contrôle GridView peut afficher des données à l'aide d'un contrôle ObjectDataSource sur une page Web Forms. ObjectDataSource identifie le nom de classe qualifié complet ou partiel d'un objet métier avec sa propriété TypeName et une méthode de l'objet métier appelée pour récupérer les données avec sa propriété SelectMethod. Au moment de l'exécution, l'objet est créé et la méthode est appelée par réflexion. Le contrôle GridView effectue une énumération de la collection IEnumerable retournée par SelectMethod, puis affiche les données.
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<html>
<head>
<title>ObjectDataSource - Visual Basic 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.VB.EmployeeLogic" />
</form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<html>
<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#" %>
<html>
<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>
L'exemple de code suivant fournit un exemple d'objet métier de couche intermédiaire utilisé par cet exemple de code ObjectDataSource et de nombreux autres. L'exemple de code se compose des deux classes de base suivantes :
-
La classe EmployeeLogic, qui est une classe sans état qui encapsule la logique métier.
-
La classe NorthwindEmployee, qui est une classe du modèle contenant uniquement les fonctionnalités de base requises pour charger et rendre persistantes des données de la couche Données.
Une classe NorthwindDataException supplémentaire est fournie dans un but pratique.
Cet ensemble d'exemples de classes fonctionne avec la base de données Northwind Traders disponible avec Microsoft SQL Server et Microsoft Access. Pour obtenir un exemple complet, vous devez compiler et utiliser ces classes avec les exemples de code Web Forms fournis.
Cet exemple est conçu pour être simple à suivre et pour illustrer l'une des interactions les plus courantes entre un objet métier et un contrôle ObjectDataSource. Il ne s'agit pas d'une recommandation de conception. Dans certains exemples, des méthodes supplémentaires sont ajoutées aux classes EmployeeLogic ou NorthwindEmployee, ou des modifications sont apportées à ce jeu de classes pour illustrer les concepts fondamentaux.
Imports System
Imports System.Collections
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace Samples.AspNet.VB
'
' EmployeeLogic is a stateless business object that encapsulates
' the operations you can perform on a NorthwindEmployee object.
' When the class is written in Visual Basic, you cannot use the Shared
' part.
Public Class EmployeeLogic
' Returns a collection of NorthwindEmployee objects.
Public Shared Function GetAllEmployees() As ICollection
Dim al As New ArrayList()
Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")
Dim sds As New SqlDataSource(cts.ConnectionString, "SELECT EmployeeID FROM Employees")
Try
Dim IDs As IEnumerable = sds.Select(DataSourceSelectArguments.Empty)
' Iterate through the Enumeration and create a
' NorthwindEmployee object for each ID.
For Each row As DataRowView In IDs
Dim id As String = row("EmployeeID").ToString()
Dim nwe As New NorthwindEmployee(id)
' Add the NorthwindEmployee object to the collection.
al.Add(nwe)
Next
Finally
' If anything strange happens, clean up.
sds.Dispose()
End Try
Return al
End Function 'GetAllEmployees
Public Shared Function GetEmployee(anID As Object) As NorthwindEmployee
Return New NorthwindEmployee(anID)
End Function 'GetEmployee
Public Shared Sub UpdateEmployeeInfo(ne As NorthwindEmployee)
Dim retval As Boolean = ne.Save()
If Not retval Then
Throw New NorthwindDataException("UpdateEmployee failed.")
End If
End Sub 'UpdateEmployeeInfo
Public Shared Sub DeleteEmployee(ne As NorthwindEmployee)
End Sub 'DeleteEmployee
End Class 'EmployeeLogic
Public Class NorthwindEmployee
Public Sub New()
ID = DBNull.Value
aLastName = ""
aFirstName = ""
aTitle = ""
titleOfCourtesy = ""
reportsTo = - 1
End Sub 'New
Public Sub New(anID As Object)
Me.ID = anID
Dim cts As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("NorthwindConnection")
Dim conn As New SqlConnection(cts.ConnectionString)
Dim sc As 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())
Dim sdr As SqlDataReader = Nothing
Try
conn.Open()
sdr = sc.ExecuteReader()
' This is not a while loop. It only loops once.
If Not (sdr Is Nothing) AndAlso sdr.Read() Then
' The IEnumerable contains DataRowView objects.
Me.aFirstName = sdr("FirstName").ToString()
Me.aLastName = sdr("LastName").ToString()
Me.aTitle = sdr("Title").ToString()
Me.titleOfCourtesy = sdr("TitleOfCourtesy").ToString()
If Not sdr.IsDBNull(4) Then
Me.reportsTo = sdr.GetInt32(4)
End If
Else
Throw New NorthwindDataException("Data not loaded for employee id.")
End If
Finally
Try
If Not (sdr Is Nothing) Then
sdr.Close()
End If
conn.Close()
Catch se As SqlException
' Log an event in the Application Event Log.
Throw
End Try
End Try
End Sub 'New
Private ID As Object
Private aLastName As String
Public Property LastName() As String
Get
Return aLastName
End Get
Set
aLastName = value
End Set
End Property
Private aFirstName As String
Public Property FirstName() As String
Get
Return aFirstName
End Get
Set
aFirstName = value
End Set
End Property
Private aTitle As String
Public Property Title() As String
Get
Return aTitle
End Get
Set
aTitle = value
End Set
End Property
Private titleOfCourtesy As String
Public Property Courtesy() As String
Get
Return titleOfCourtesy
End Get
Set
titleOfCourtesy = value
End Set
End Property
Private reportsTo As Integer
Public Property Supervisor() As Integer
Get
Return reportsTo
End Get
Set
reportsTo = value
End Set
End Property
Public Function Save() As Boolean
Return True
End Function 'Save
End Class 'NorthwindEmployee
Friend Class NorthwindDataException
Inherits Exception
Public Sub New(msg As String)
MyBase.New(msg)
End Sub 'New
End Class 'NorthwindDataException
End Namespace
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
Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
.NET Framework
Prise en charge dans : 2.0