C#, .Net 2.0: J'ai une classe qui encapsule un seul enregistrement à partir d'une base de données accessible via un objet OleDbConnection. C'est assez simple, il exécute un "SELECT * FROM table WHERE key = {une certaine valeur};" puis expose les champs en tant que propriétés avec quelques méthodes pour manipuler les données. Lorsque je crée une nouvelle instance de cet objet, le code qui est exécuté ressemble:Quel est le meilleur moyen de récupérer un seul enregistrement via un OleDbConnection?
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Connection.Open();
}
da.Fill(ds);
return ds.Tables[0];
cmd est un objet OleDbCommand passé à la méthode. Lorsque j'exécute cela, environ 95% du temps nécessaire pour créer l'objet se trouve dans l'appel da.Fill (ds), selon le profileur VS 2008. J'ai également une classe qui représente une collection de ces objets qui implémente IEnumerable, et lors de l'itération de cet objet en utilisant foreach, chaque objet record est créé à la volée et ces instructions da.Fill (ds) s'additionnent rapidement.
Ma question est, est-ce la meilleure façon d'aller chercher un seul enregistrement? Alternativement, y a-t-il une manière plus préférée d'implémenter l'objet de collection de sorte qu'itérer ne prend pas si longtemps?
Merci
Merci! J'ai essayé les solutions OleDbDataReader suggérées. Malheureusement, dans mon scénario spécifique, aucune des solutions DataReader n'a amélioré notablement les performances par rapport à l'utilisation de OleDbDataAdapter.Fill(). –