La réponse à cette peut être très large.
Essentiellement, la plus grande différence pour moi qui, habituellement, a une influence sur mon décisions sur lequel utiliser, c'est qu'avec un SQLDataReader, vous êtes en "streaming" des données de la base de données. Avec un SQLDataAdapter, vous extrayez les données à partir de la base de données dans un objet qui peut lui-même être interrogé ultérieurement, ainsi que d'effectuer les opérations CRUD sur.
Évidemment, avec un flux de données SQLDataReader est BEAUCOUP plus rapide, mais vous ne peut traiter qu'un seul enregistrement à la fois. Avec un SQLDataAdapter, vous avez une collection complète des lignes correspondantes à votre requête à partir de la base de données pour travailler avec/passer votre code.
AVERTISSEMENT: Si vous utilisez un SQLDataReader, TOUJOURS, toujours, TOUJOURS, assurez-vous que vous écrivez bon code pour fermer la connexion, puisque vous êtes de garder la connexion ouverte avec le SQLDataReader. Défaut de ce faire, ou à la bonne gestion des erreurs pour fermer la connexion en cas d'erreur dans le traitement des résultats de PARALYSER votre application avec connexion fuites.
Pardon pour mon VB, mais c'est le montant minimum de code que vous devez avoir lorsque vous utilisez un SqlDataReader:
Using cn As New SqlConnection("..."), _
cmd As New SqlCommand("...", cn)
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
''# ...
End While
End Using
End Using
l'équivalent en C#:
using (var cn = new SqlConnection("..."))
using (var cmd = new SqlCommand("..."))
{
cn.Open();
using(var rdr = cmd.ExecuteReader())
{
while(rdr.Read())
{
//...
}
}
}