0
votes

ASP.NET CORE Obtenir le compte d'une table à l'aide de la requête brute

Comment exécuter une requête brute dans le noyau ASP.NET pour retourner le nombre de lignes d'une table?

Actuellement, je le fais et le résultat renvoyé est -1. Je pense que le résultat de retour est basé sur le nombre d'enregistrements affectés. xxx

aucune idée sur la manière d'obtenir le comptage de la variable de numérosOrows sera appréciée. < P> Remarque: Le tableau ci-dessus n'est pas un modèle, donc j'ai besoin d'exécuter une requête crue.

merci


1 commentaires

S'il vous plaît marquer la réponse comme un accepté si cela vous a été utile ou de la commenter si ...


3 Réponses :


0
votes

Il y a deux approches communes:

a. xxx

b. xxx


5 commentaires

Je pense que vous devriez expliquer explicitement que ce code ne soit sécurisé à partir de l'injection SQL lorsque l'interpolation de chaîne est effectuée directement dans le cadre de la transmission du paramètre de requête à ExécuteqlInterpolateSync. Lorsque vous interpolez la chaîne avant de stocker dans une variable distincte, ce code sera vulnérable.


La question ci-dessus n'est-elle pas une injection SQL en sécurité dans la question?


@Xamt je n'ai aucune méthode appelée cout () ou d'abord ()


@Bikram; Ajouter à l'aide de system.linq;


@XAMT Je ne sais pas si vous avez testé votre code ou non. Mais à l'aide de System.Linq ne résout pas la méthode du compte sur la mine



1
votes

Il n'est actuellement pas possible d'obtenir le résultat de la requête lors de l'utilisation de ExecutsqlInterpolateSync. Il en va de même pour toute instruction LINQ supplémentaire.

Vous pouvez, cependant, utilisez le fournisseur Ado.net sous-jacent: xxx

Ajoutez ceci à votre classe dbcontext et appelez-la avec : xxx

méfiez-vous, cependant, il s'agit d'une opération coûteuse si vous avez beaucoup de lignes dans votre table! Une approche alternative pour ne chercher que les résultats pertinents serait de remplacer xxx

avec xxx

et transmettez les paramètres comme fonction Paramètres. xxx

Assurez-vous également d'échapper à tous les paramètres s'ils sont soumis de quelque manière que ce soit par la saisie de l'utilisateur pour empêcher les attaques d'injection SQL!


1 commentaires

Oui, je finis par utiliser la syntaxe de commande. Un peu, il n'y a rien de construit pour le faire.



0
votes

Puisque personne ne m'a donné la bonne réponse. Je finis par utiliser ce qui suit.

public async Task<bool> IsAValidProduct(string productBrandCode)
        {
            int count = 0;
            await using DbCommand command = appDbContext.Database.GetDbConnection().CreateCommand();
            command.CommandText =
                "SELECT COUNT(CODE) FROM [samaster] WHERE CODE=@productBrandCode AND WAREHOUSE=@warehouse ";
            command.CommandType = CommandType.Text;
            command.Parameters.Add(new SqlParameter("@productBrandCode", SqlDbType.VarChar)
                {Value = productBrandCode});

            command.Parameters.Add(new SqlParameter("@warehouse", SqlDbType.VarChar)
                {Value = warehouse});
            await appDbContext.Database.OpenConnectionAsync();

            count = (int) await command.ExecuteScalarAsync();

            await appDbContext.Database.CloseConnectionAsync();
            return count == 1;
        }


0 commentaires