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.