c#
  • asp.net
  • 2009-09-24 9 views 1 likes 
    1

    J'ai une requête que je suis en cours d'exécution dans le dossier C#:ASP.net C# nombre de SQL (*)

    DataSet ds = db.ExecuteDataSet(System.Data.CommandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 
    

    que je veux faire est de récupérer la valeur de « compteur » dans cette requête et "return" car mes fonctions renvoient la valeur.

    Comment puis-je faire cela?

    +1

    Vous avez déjà obtenu des réponses à votre question. Je veux juste ajouter que si la table contient une grande quantité de données, vous pouvez obtenir de meilleures performances en spécifiant un champ indexé (comme la clé primaire) dans la fonction count: '" SELECT count (tableId) FROM Table .. . "' –

    +0

    C'est un bon point. Merci. – Sev

    +0

    "... vous pouvez obtenir de meilleures performances en spécifiant un champ indexé ...". Je ne sais pas pourquoi ce serait le cas. Sûrement le point important pour la performance est s'il existe un index sur la colonne (s) dans la clause where, (dans ce cas "où [Table]. [Field] = 'test'"). Sinon, il y aura une analyse de table, peu importe si vous spécifiez COUNT (*) ou COUNT (PKColumn). – Joe

    Répondre

    11

    Comme la requête SQL ne reviendra pas un ensemble de données mais un scalaire, vous devez utiliser la méthode .ExecuteScalar():

    int count = (int)db.ExecuteScalar(System.Data.COmmandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 
    

    (Il serait plus facile pour nous de fournir une réponse si vous nous avez dit quel type l'instance db est ...)

    +0

    Base de données db = DatabaseFactory.CreateDatabase - est-ce ce que vous voulez dire? – Sev

    +0

    Avec votre suggestion, j'obtiens une erreur indiquant que je ne peux pas implicitement convertir l'objet type en int. – Sev

    +0

    Vous devez lancer. Il. J'ai mis à jour l'exemple pour corriger l'erreur que vous avez reçue. – JohnFx

    1
    DataSet ds = db.ExecuteDataSet(System.Data.CommandType.Text, "SELECT count(*) as counter FROM [Table] where [Table].[Field] = 'test'"); 
    return Convert.ToInt32(ds.Tables[0].Rows[0]["counter"]); 
    
    +0

    Je reçois une erreur: Impossible d'appliquer l'indexation avec [] à une expression de type 'System.Data.DataTable' – Sev

    +0

    Lorsque vous avez initialisé l'ensemble de données, avez-vous créer une datatable pour cela? –

    -2

    Vous ne devriez pas utiliser SQL en ligne. Ce compte SELECT doit être lancé dans une procédure stockée. La procédure stockée doit être appelée à partir de la couche d'accès aux données de votre application.

    C'est là que la réutilisation entre en jeu, vous commencez à remarquer que vous pourriez avoir besoin d'appeler cette fonction à différents endroits de votre site/application client.

    Juste quelques conseils!

    Questions connexes