SqlDataSource, classe
Assembly : System.Web (dans system.web.dll)
Le contrôle de source de données SqlDataSource représente des données dans une base de données relationnelle SQL pour les contrôles liés aux données. Vous pouvez utiliser le contrôle SqlDataSource conjointement à un contrôle lié aux données pour récupérer des données d'une base de données relationnelle et afficher, modifier et trier des données sur une page Web avec peu ou sans code.
Pour vous connecter à une base de données, vous devez affecter une chaîne de connexion valide à la propriété ConnectionString. SqlDataSource peut prendre en charge toute base de données relationnelle SQL à laquelle il est possible de se connecter grâce à un fournisseur ADO.NET, tel que SqlClient, OleDb, Odbc ou OracleClient. Pour plus d'informations sur la sécurisation des chaînes de connexion, consultez Comment : sécuriser des chaînes de connexion lors de l'utilisation de contrôles de source de données.
Pour récupérer des données d'une base de données sous-jacente, définissez la propriété SelectCommand avec une requête SQL. Si la base de données à laquelle SqlDataSource est associé prend en charge les procédures stockées, vous pouvez affecter le nom d'une procédure stockée à la propriété SelectCommand. La requête SQL que vous spécifiez peut également être une requête paramétrée. Vous pouvez ajouter des objets Parameter associés à une requête paramétrée à la collection SelectParameters. Pour plus d'informations sur les requêtes SQL paramétrées et leur syntaxe, consultez Utilisation de paramètres avec des contrôles de source de données.
Le contrôle SqlDataSource 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 Select est appelée automatiquement par des contrôles liés au SqlDataSource 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 utiliser la propriété DataSource, mais vous devrez ensuite appeler explicitement la méthode DataBind du contrôle lié aux données. Parmi les contrôles liés aux données pouvant utiliser SqlDataSource, on trouve DataGrid, DetailsView, DataList et DropDownList. Vous pouvez appeler la méthode Select par programme à tout moment pour récupérer les données de la base de données sous-jacente.
Dans les scénarios ASP.NET déclaratifs et par programme, vous pouvez affecter l'ID du SqlDataSource à la propriété DataSourceID du contrôle lié aux données. Vous pouvez également assigner une instance de la classe SqlDataSource à la propriété DataSource du contrôle lié aux données. Pour plus d'informations sur la liaison d'un contrôle lié aux données à des contrôles de source de données, consultez Vue d'ensemble de l'accès aux données ASP.NET.
Selon les fonctions du produit de la base de données sous-jacente et la configuration de l'instance de la classe SqlDataSource, 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 texte de commande 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 une chaîne SQL ou le nom d'une procédure stockée à la propriété UpdateCommand et ajoutez tous les paramètres requis à la collection UpdateParameters. 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 requêtes et commandes SQL que vous utilisez dans les propriétés SelectCommand, UpdateCommand, InsertCommand et DeleteCommand peuvent être paramétrées. Cela signifie que la requête ou commande peut utiliser des espaces réservés au lieu de valeurs littérales et lier les espaces réservés à des variables d'application ou définies par l'utilisateur. Vous pouvez lier des paramètres de requêtes SQL à des variables Session, à des valeurs passées sur la chaîne de requête pour une page Web Forms, aux valeurs de propriété d'autres contrôles serveur, etc. Pour plus d'informations sur l'utilisation de paramètres dans les requêtes SQL avec SqlDataSource, consultez Utilisation de paramètres avec des contrôles de source de données, Utilisation de paramètres avec le contrôle SqlDataSource et Utilisation de paramètres avec le contrôle SqlDataSource.
Par défaut, le contrôle SqlDataSource utilise le fournisseur de données .NET Framework pour SQL Server, mais SqlDataSource n'est pas spécifique à Microsoft SQL Server. Vous pouvez établir une connexion entre le contrôle SqlDataSource et tout produit de base de données disposant d'un fournisseur ADO.NET managé. Lorsqu'il est utilisé avec le fournisseur System.Data.OleDb, SqlDataSource peut fonctionner avec toute base de données conforme à OLE DB. Lorsqu'il est utilisé avec le fournisseur System.Data.Odbc, SqlDataSource peut être utilisé avec tout pilote et base de données ODBC, y compris IBM DB2, MySQL et PostgreSQL. Lorsqu'il est utilisé avec le fournisseur System.Data.OracleClient, SqlDataSource peut fonctionner avec les bases de données Oracle 8.1.7 et versions ultérieures. La liste des fournisseurs autorisés est enregistrée dans la section DbProviderFactories du fichier de configuration, dans le fichier Machine.config ou Web.config. Pour plus d'informations, consultez Sélection de données à l'aide du contrôle SqlDataSource.
Si vous affichez des données sur votre page à l'aide d'un SqlDataSource, vous pouvez améliorer la performance de la page en utilisant les fonctions de mise en cache de données du contrôle de source de données. La mise en cache réduit la charge de traitement sur les serveurs de base de données aux dépens de la mémoire sur le serveur Web ; dans la plupart des cas, il s'agit d'un bon compromis. SqlDataSource 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 que l'entrée du cache ne soit ignorée. Vous pouvez également spécifier un CacheExpirationPolicy et éventuellement une valeur SqlCacheDependency.
SqlDataSource fournit des fonctions supplémentaires, comme répertorié dans le tableau suivant.
| Fonction | Configuration requise |
|---|---|
| Mise en cache | Affectez la valeur DataSet à la propriété DataSourceMode, la valeur true à la propriété EnableCaching et définissez les propriétés CacheDuration et CacheExpirationPolicy selon le comportement de mise en cache que vous souhaitez pour vos données en mémoire cache. |
| Suppression | Affectez à la propriété DeleteCommand une instruction SQL utilisée pour supprimer des données. Cette instruction est généralement paramétrée. |
| Filtrage | Affectez la valeur DataSet à la propriété DataSourceMode. Affectez à la propriété FilterExpression une expression de filtrage utilisée pour filtrer les données lorsque la méthode Select est appelée. |
| Insertion | Affectez à la propriété InsertCommand une instruction SQL utilisée pour insérer des données. Cette instruction est généralement paramétrée. |
| Pagination | Non pris en charge actuellement par SqlDataSource. Cependant, certains contrôles liés aux données, tels que GridView, prennent en charge la pagination lorsque vous affectez la valeur DataSet à la propriété DataSourceMode. |
| Sélection | Affectez à la propriété SelectCommand une instruction SQL utilisée pour récupérer des données. |
| Tri | Affectez la valeur DataSet à la propriété DataSourceMode. |
| Mise à jour | Affectez à la propriété UpdateCommand une instruction SQL utilisée pour mettre à jour les données. Cette instruction est généralement paramétrée. |
Comme tous les contrôles de source de données, le contrôle SqlDataSource est associé à une classe d'affichage de la source de données. Le contrôle SqlDataSource n'est associé qu'à un SqlDataSourceView et est toujours nommé Table.
Il n'y a pas de rendu visuel du contrôle SqlDataSource ; 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, SqlDataSource ne prend pas en charge les fonctionnalités visuelles, telles que celles fournies par la propriété EnableTheming ou SkinID.
Cette section contient quatre exemples de code :
-
Le premier exemple de code illustre comment afficher des données de SQL Server dans un contrôle GridView à l'aide de la syntaxe déclarative.
-
Le deuxième exemple de code illustre comment afficher les données d'une base de données ODBC dans un contrôle GridView à l'aide de la syntaxe déclarative.
-
Le troisième exemple de code illustre comment afficher et mettre à jour des données dans un contrôle GridView.
-
Le quatrième exemple de code illustre comment afficher et mettre à jour des données dans un contrôle DropDownList.
L'exemple de code suivant illustre comment utiliser un contrôle SqlDataSource de manière déclarative pour récupérer des données de SQL Server et les afficher dans un contrôle GridView.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataReader"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
L'exemple de code suivant illustre comment utiliser un contrôle SqlDataSource de manière déclarative pour récupérer les données d'une base de données ODBC et les afficher dans un contrôle GridView. La propriété ProviderName est le nom du fournisseur de données .NET Framework pour ODBC qui est System.Data.Odbc.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <!-- This example uses a Northwind database that is hosted by an ODBC-compliant database. To run this sample, create an ODBC DSN to any database that hosts the Northwind database, including Microsoft SQL Server or Microsoft Access, change the name of the DSN in the ConnectionString, and view the page. --> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ProviderName="System.Data.Odbc" DataSourceMode="DataReader" ConnectionString="dsn=myodbc3dsn;" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<!-- This example uses a Northwind database that is hosted by an ODBC-compliant
database. To run this sample, create an ODBC DSN to any database that hosts
the Northwind database, including Microsoft SQL Server or Microsoft Access,
change the name of the DSN in the ConnectionString, and view the page.
-->
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ProviderName="System.Data.Odbc"
DataSourceMode="DataReader"
ConnectionString="dsn=myodbc3dsn;"
SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
DataSourceID="SqlDataSource1">
</asp:GridView>
</FORM>
</BODY>
</HTML>
L'exemple de code suivant illustre un scénario d'affichage et de mise à jour commun avec le contrôle GridView. Comme pour les exemples précédents, les données de la base de données Northwind sont affichées dans le contrôle GridView. En outre, étant donné qu'une propriété UpdateCommand est spécifiée et que la propriété AutoGenerateEditButton a la valeur true, vous pouvez modifier et mettre à jour les enregistrements sans code supplémentaire. Le contrôle GridView gère automatiquement les paramètres d'ajout à la collection UpdateParameters et appelle la méthode Update lorsque vous cliquez sur le bouton Mettre à jour dans le contrôle GridView.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees" UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" AutoGenerateEditButton="True" DataSourceID="SqlDataSource1"> <columns> <asp:BoundField HeaderText="First Name" DataField="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" /> <asp:BoundField HeaderText="Title" DataField="Title" /> </columns> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees"
UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID">
</asp:SqlDataSource>
<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="EmployeeID"
AutoGenerateEditButton="True"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField HeaderText="First Name" DataField="FirstName" />
<asp:BoundField HeaderText="Last Name" DataField="LastName" />
<asp:BoundField HeaderText="Title" DataField="Title" />
</Columns>
</asp:GridView>
</FORM>
</BODY>
</HTML>
L'exemple de code suivant illustre un scénario d'affichage et de mise à jour commun avec les contrôles DropDownList et TextBox. Le contrôle DropDownList n'ajoute pas automatiquement de paramètres de mise à jour à la collection UpdateParameters et n'appelle pas automatiquement la méthode Update. Vous devez donc le faire. Les paramètres de mise à jour sont spécifiés de manière déclarative et vous pouvez ajouter un gestionnaire d'événements pour exécuter l'opération Update lorsqu'un événement est déclenché.
<%@Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <SCRIPT runat="server"> private void On_Click(Object source, EventArgs e) { try { SqlDataSource1.Update(); } catch (Exception except) { // Handle the Exception. } Label2.Text="The record was updated successfully!"; } </SCRIPT> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees" UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID"> <UpdateParameters> <asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/> <asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/> </UpdateParameters> </asp:SqlDataSource> <asp:DropDownList id="DropDownList1" runat="server" DataTextField="LastName" DataValueField="EmployeeID" DataSourceID="SqlDataSource1"> </asp:DropDownList> <P> <asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." /> <asp:TextBox id="TextBox1" runat="server" /> <asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" /> <P><asp:Label id="Label2" runat="server" Text="" /> </FORM> </BODY> </HTML>
<%@Page Language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<SCRIPT runat="server">
private void On_Click(Object source, System.EventArgs e)
{
try {
SqlDataSource1.Update();
}
catch (Exception except) {
// Handle the Exception.
}
Label2.set_Text("The record was updated successfully!");
} //On_Click
</SCRIPT>
<HTML>
<BODY>
<FORM runat="server">
<asp:SqlDataSource
id="SqlDataSource1"
runat="server"
ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees"
UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID">
<UpdateParameters>
<asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/>
<asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/>
</UpdateParameters>
</asp:SqlDataSource>
<asp:DropDownList
id="DropDownList1"
runat="server"
DataTextField="LastName"
DataValueField="EmployeeID"
DataSourceID="SqlDataSource1">
</asp:DropDownList>
<P>
<asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." />
<asp:TextBox id="TextBox1" runat="server" />
<asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" />
<P><asp:Label id="Label2" runat="server" Text="" />
</FORM>
</BODY>
</HTML>
- AspNetHostingPermission pour opérer dans un environnement hébergé. Valeur de demande : LinkDemand ; valeur d'autorisation : Minimal.
- AspNetHostingPermission pour opérer dans un environnement hébergé. Valeur de demande : InheritanceDemand ; valeur d'autorisation : Minimal.
System.Web.UI.Control
System.Web.UI.DataSourceControl
System.Web.UI.WebControls.SqlDataSource
System.Web.UI.WebControls.AccessDataSource
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.