Comment dois-je remplir une Table de données à l'aide de DataReader
Je veux remplir un DataTable à l'aide de DataReader.
J'ai créé un objet comme ça
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows)
{
}
Connexes: stackoverflow.com/questions/18961938/...
OriginalL'auteur NoviceToDotNet | 2010-11-03
Vous devez vous connecter pour publier un commentaire.
Si tout ce que vous voulez, c'est un ReadOnly DataTable fins de reporting ou de web, essayez ceci:
De crédit où il est dû: http://www.dotnetcurry.com/showarticle.aspx?ID=143
OriginalL'auteur jerome
DataTable.load() peut être utilisé pour une approche générique.
OriginalL'auteur Anant Dabhi
Vous pouvez obtenir le Schéma de la Table à partir de votre
SqlDataReader dr
pour obtenir les noms des colonnes, enregistrer le nom d'unList<string>
et de les ajouter aux colonnes sur une nouvelleDataTable
, puis de la remplirDataTable
l'aide de l'indexation surdr
avec les noms de la liste:Évidemment, vous auriez besoin de votre
try...catch...finally
bloc autour de tout cela à la gestion des exceptions et l'élimination de votre connexion, et d'utiliser la dernière condition après lafinally
. J'ai trouvé ce utile pour gérer le trouver quand j'ai eu les résultats ou pas, et éviter les problèmes avecdt.Load(dr)
qui n'était pas quand il n'y avait pas de résultats.ds.Fill(adapter)
n'était pas beaucoup mieux, car il n'quand j'ai essayé de saisir un tableau de 97 colonnes et environ 80 lignes avecSELECT * FROM MyTable
. Seul le code ci-dessus réussi à travailler dans tous les scénarios, pour moi.Posté sur Remplir la table de données à partir du lecteur de données par sarathkumar. J'ai fourni le résumé, condensé, a ajouté le nul de contrôles et d'affectation si c'est une valeur null, et ajout de la table pour un
DataSet
et ajouté leDataSet
état à la fin.NOTE: Pour ceux qui utilisent
OracleDataReader
, j'ai découvert que vous pouvez rencontrer une erreur si vous avez unNCLOB
ouCLOB
champ est null dans la table/jeu de résultats que vous lisez. J'ai découvert que si j'ai vérifié pour cette colonne en regardant l'indexi
et nedr.GetOracleClob(i)
au lieu dedr[i]
, j'ai arrêté l'obtention de l'exception. Voir la réponse à EF + ODP.NET + CLOB = Valeur Ne peut pas être Null - nom de Paramètre: byteArray? et j'ai ajouté cette condition dans le code ci-dessus lorsqueif (!dr.IsDBNull[i])
. De même, si vous avez un nullDecimal
champ, j'ai eu à le vérifier avecdr.GetFloat(i);
, puisque nidr.GetOracleDecimal(i);
etdr.GetDecimal(i);
semblait correctement accueillir pour une valeur null.OriginalL'auteur vapcguy
Pour remplir un
DataSet
, vous pouvez utiliser quelque chose comme:OriginalL'auteur Hans Kesting