2009-01-12 7 views
0

J'écris actuellement une classe C# dans mon application ASP.NET (3.5) pour gérer toutes les requêtes de base de données. Certaines des méthodes sont là pour faire une requête select à la base de données. À l'intérieur de la méthode j'ai simplement un SqlDataReader r = command.ExecuteReader(); pour aller chercher les données.Stockage d'un objet SqlDataReader dans C#/ASP.NET?

Je souhaite maintenant que r soit renvoyé par la méthode, mais lorsque je ferme la connexion à la base de données, le lecteur de données se ferme et l'objet ne contient plus rien. J'ai pensé à tout mettre dans un tableau de chaînes, mais cela n'est pas pratique si j'ai mélangé des entiers et des champs de texte dans ma base de données. Existe-t-il un moyen facile ("premade") de stocker les données dans un objet à retourner?

+0

Un DataReader doit être utilisé dans des situations où vous ne voulez pas d'obtenir toutes les données à la fois. DataTables (et DataSets) sont utilisés dans les situations où vous lisez les données dans un remplissage. –

Répondre

3

Vous pouvez utiliser un datatable et SqlDataAdapter:

using(SqlDataAdapter adap = new SqlDataAdapter(cmd)) 
{ 
    adap.fill(myDataTable); 
} 

return myDataTable; 
+0

ou utilisez la méthode de chargement datatable - myDataTable.Load (myReader); –

0

vous pouvez simplement définir le CommandBehavior à closeConnection. puis lorsque vous appelez r.close la connexion sous-jacente se ferme.

+0

+1 pour contrer le drivevoter; c'est une réponse correcte pour la question spécifique, mais bien sûr, l'OP utilise incorrectement le lecteur de données ;-) –

2

Typiquement, les résultats sont soit bourrés dans une collection ou datatable. Les données sont un peu plus faciles du point de vue de ne pas avoir à instancier des objets et à les stocker.

1

Avez-vous pensé à utiliser LINQ ou un ORM comme subsonic pour cette

Questions connexes