J'ai réussi à faire passer mon projet de odbc.datareader à mysql.datareader. Le problème est qu'avec le premier lecteur de données/odbc), la propriété AffectedRows récupère le nombre de lignes correctement même s'il s'agissait d'une requête pure. Mais ça ne marche pas avec mysql.datareader, son -1 alors. Je ne vois donc pas comment récupérer le nombre de lignes, c'est-à-dire "les vues de résultat". EDIT: Je connais son lecteur uniquement en avant, mais ce que je ne comprends pas est: Si un point d'arrêt à la ligne DBreader = commande.ExecuteRader(), je peux voir que DBreader a - dans la vue résultat - autant d'objets que les lignes devraient être. Comment ça se fait que c'est connu juste après la course? MerciComment compter des lignes dans MySqlDataReader?
Répondre
La raison pour laquelle DataReader ne contient pas le rowcount est qu'il peut être très coûteux à calculer. Par exemple, vous dites exécutez une requête qui renvoie les bons de commande qui ont été saisis cette année et non Deleted:
SELECT * FROM PurchaseOrders
WHERE PurchaseDt > '2009-01-01'
AND IsDeleted = 0
Et vous utilisez cette requête avec un DataReader et de lire les 10 premières lignes. SQL Server "envoie" des lignes au client lorsqu'il le demande. Chaque fois que vous demandez une autre ligne, SQL Server exécute l'étape suivante de la requête. Ainsi, même SQL Server ne connaît pas le nombre total de lignes avant que vous n'ayez lu toutes les lignes.
Voici la fonction que j'utilise. N'hésitez pas à l'adapter à vos besoins.
/// <summary>
/// Counts the number of rows in a given table.
/// </summary>
/// <param name="tableName">The name of the table to query.</param>
/// <param name="closeConnectionWhenDone">A flag indicating whether the connection should be closed once the query is executed.</param>
/// <returns>The number of rows in the table.</returns>
private static int GetNumRowsInTable(string tableName, bool closeConnectionWhenDone = false)
{
string selectQueryString = String.Format("select 1 from {0};", tableName);
int numRows = 0;
CommandBehavior behavior = closeConnectionWhenDone ? CommandBehavior.CloseConnection : CommandBehavior.Default;
using (var command = new OdbcCommand(selectQueryString, ODBCHelper.Connection))
using (var reader = command.ExecuteReader(behavior))
{
while (reader.Read())
{
numRows++;
}
}
return numRows;
}
Pour compter le nombre de lignes dans une table (par exemple le nom est studentTable), d'une part j'utiliser suivant l'instruction SQL:
SELECT COUNT(*) FROM studentTable
J'utilise cette déclaration que le texte de commande pour l'objet MySqlCommand .
ensuite de connaître la valeur (le nombre de lignes) en utilisant un objet de MySqlDataReader (par exemple son nom est lecteur) J'utilise le code suivant:
reader.GetString(0);
est Ci-dessous le code que j'utilise:
...
MySqlConnection conn = new MySqlConnection(connString);
MySqlCommand command = conn.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM studentTable";
try
{
conn.Open();
}
catch (Exception ex)
{
label1.Content = ex.Message;
}
reader = command.ExecuteReader();
while (reader.Read())
{
label1.Content = "";
label1.Content = reader.GetString(0);
}
reader.Close();
conn.Close();
Es muy simple, le lecteur ne tiene pas l'optión de contánde filas existe, el Datable si tiene esa opción. En savoir plus sur les commentaires et les infos sur le lecteur de données sur les contacts avec lesquels vous pouvez communiquer (y compris les coordonnées complètes, les coordonnées et les coordonnées complètes).
String consulta = "SELECT * FROM xxx";
conexion.Open();
comando.CommandText = consulta;
reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
int nrofilas = dt.Rows.Count;
foreach (DataRow dr in dt.Rows)
{
var value = dr["nameField"];
}
Bienvenue dans Stack Overflow. Veuillez inclure quelques explications avec votre code (qu'avez-vous réparé? Où la question originale a-t-elle mal tourné?) Les réponses avec un code non mis en commentaire peuvent être marquées comme étant de mauvaise qualité et supprimées. – Graham
- 1. Problème mySql dans MySqlDataReader
- 2. Comment compter les lignes dans MySQL?
- 3. comment compter les lignes extraites par SqlDataSource
- 4. comment compter dynamiquement des lignes de table ajoutées
- 5. SSRS: comment compter les lignes vraies
- 6. C# comment compter les lignes dans un fichier texte
- 7. Comment retourner plusieurs tables en utilisant MySqlDataReader?
- 8. Comment compter le nombre de lignes dans un jqGrid?
- 9. Comment compter les lignes dans Lift (infrastructure Web de Scala)
- 10. PHP - Comment compter les lignes de code dans une application
- 11. SubSonic: MySqlDataReader ferme la connexion
- 12. comment compter des enregistrements dans ASP classique?
- 13. Comment compter des intérêts similaires dans MySQL
- 14. Comment compter le nombre de lignes et l'afficher
- 15. MySQL Compter et trier les lignes
- 16. SQL comment compter toutes les lignes jusqu'à une valeur maximale
- 17. Comment compter les lignes de sortie avec xslt?
- 18. Comment compter aucun des éléments?
- 19. Zend Framework - compter les lignes dans la clause select?
- 20. compter le nombre de lignes dans un fichier texte
- 21. MySqlDataReader donnant une erreur à la construction
- 22. Comment compter différentes lignes dans MySQL? (trois colonnes dans son ensemble)
- 23. compter les lignes non uniques dans le tableau avec des critères supplémentaires
- 24. Comment compter les lignes dans un gridview dans asp.net en utilisant jQuery
- 25. comment faire compter dans MySQL
- 26. Afficher et compter des catégories dans OpenCart
- 27. groupe mysql par et compter les lignes problème
- 28. Comment compter des valeurs spécifiques dans une table
- 29. Comment utiliser SQL pour sélectionner des lignes contenant plus de 50 lignes dans une autre table?
- 30. Comment puis-je compter le nombre de lignes avant une certaine ligne dans sqlite?
Comment puis-je demander seulement 10 lignes? Si j'exécute SELECT * .... je suppose que le lecteur de données C# fait tout en une seule étape, je veux dire l'application va geler jusqu'à ce que la requête n'est pas terminée? – Petr
Une façon de demander 10 lignes est d'appeler Read() seulement 10 fois. Un autre serait d'ajouter «LIMIT 10» à la fin de la requête MySQL – Andomar
Oui, mais je ne veux pas faire :) Je demandais ce que si j'envoie simple SELECT toute requête, de sorte que la connexion DB fonctionne avec chaque lecture, puis c'est fermé? – Petr