c# - Remplissage liste générique de SqlDataReader
Comment puis-je ajouter des valeurs qu'un SqlDataReader
renvoie à une Liste générique? J'ai une méthode où je l'utiliser SqlDataReader
pour obtenir CategoryID
à partir d'un Category
table. Je tiens à ajouter tous les CategoryID
une Liste générique.
Cette dose ne pas fonctionner car il ne renvoie qu'un seul categoryID
et qui est le dernier. Je veux ajouter toutes les categoryID
à la liste et puis les retourner.
Comment dois-je faire?
SqlConnection connection = null;
SqlDataReader reader = null;
SqlCommand cmd = null;
try
{
connection = new SqlConnection(connectionString);
cmd = new SqlCommand("select CategoryID from Categories", connection );
connection.Open();
List<int> catID = new List<int>();
dr = cmd.ExecuteReader();
while (dr.Read())
{
catID.Add(Convert.ToInt32(dr["CategoryID"].ToString()));
}
}
finally
{
if (connection != null)
connection.Close();
}
return catID;
Ne l'appelez pas
Avez-vous un domaine nommé
Utilisation à l'aide de relevés autour de la connexion, de commande et le lecteur!
.ToString()
.Avez-vous un domaine nommé
catId
?Utilisation à l'aide de relevés autour de la connexion, de commande et le lecteur!
OriginalL'auteur Erik | 2011-04-10
Vous devez vous connecter pour publier un commentaire.
Essayer comme ça, c'est meilleur, plus sûr et utilise le chargement paresseux, moins de code, de travail, ...:
et puis:
ToList()
- sinon, vous avez ouvert un DB connexion. Je ne suis pas convaincu paresseux est la bonne approche ici.pas de. la connexion, le lecteur, tout ça se ferment, une fois foreach est sorti. Outre le mérite de cette, un inconvénient serait que l'appelant d'avoir à re-lire les données à partir de la base de données si vous devez ré-utiliser les objets de l'interface IEnumerable et si vous n'avez pas stockées tous de quelque part déjà. Je veux dire dans le cas où vous n'avez pas "foreach" entièrement. Avec
ToList()
vous les avez déjà quelque part..GetOrdnal
est vraiment pas nécessaire, en particulier lorsque la requête est une seule colonne comme ça,reader.GetOrdinal("CategoryID")
peut-être simplement remplacé par0
Pouvons-nous le faire pour une Liste<T>?
OriginalL'auteur Darin Dimitrov
Votre code devrait fonctionner, en supposant que
catID
est vraiment déclarée avant le bloc try, sinon ce ne sera pas compilé.Pouvez-vous mettre à jour votre exemple de code avec le réel le code que vous utilisez, vous pourriez être nouveau-ing de la liste à chaque fois, mais le code ci-dessus est clairement pas ce que vous utilisez actuellement.
oui, elle est déclarée à l' - juste au mauvais endroit au-dessus.
OriginalL'auteur BrokenGlass
COMME BrokenGlass expliqué c'est la démonstration
ainsi que vous modifiez la déclaration
à
OriginalL'auteur anishMarokey
Cela devrait fonctionner, mais je vous suggère d'utiliser
using
avec votreconnections
OriginalL'auteur Bastardo
OriginalL'auteur Asanga