L'appel de Fonctions SQL directement à partir de C#
J'ai une exigence pour exécuter une requête sur une base de données qui retourne un zéro ou un
(Vérification d'existence de critères spécifiques).
Les caractéristiques techniques que j'ai été donné pour l'examen de l'état que je devrais être en train de créer une procédure stockée qui retourne une ligne unique, avec une seule colonne appelée "résultat" qui contiendra une valeur binaire 0 ou 1.
Cependant, je ne suis pas sûr qu'une procédure stockée serait la meilleure approche, mais je suis un peu incertain donc pensé que je voudrais vous demander votre avis.
Les deux options que je peux penser sont:
1: Créer un SQL fonction scalaire qui exécute la requête et retourne un peu.
Ce pourrait alors être appelées directement à partir de l'intérieur de l' .Net client de l'application à l'aide d'un "TEXTE" objet SqlCommand, et il serait de retour bool de la "ExecuteScalar()" la méthode.
2: Créer une procédure stockée comme décrit dans les spécifications techniques.
Ce serait alors appelé à partir de la .Net application Client de la manière normale, et serait de retour d'un DataTable avec une seule ligne et une seule colonne, qui contient la valeur de bit.
Pour moi, la première option semble la meilleure. Cependant, quelque chose dans le dos de ma tête est en train de dire que ce n'est pas une bonne idée.
S'il vous plaît pourriez-vous donner votre avis et aider à soulager mes préoccupations? 🙂
Cheers,
Ian
- Pour un résultat unique comme cela, à l'aide d'un DataReader ou DataAdapter est exagéré. Aller avec le ExecuteScalar() approche.
- Merci Jeff - je n'étais pas vraiment conscient de vous peut faire à l'encontre d'une procédure stockée jusqu'à ce que l'une des réponses ci-dessous sont venus 🙂
Vous devez vous connecter pour publier un commentaire.
L'appel de la fonction scalaire est absolument la bonne solution.
Exécuter la Procédure Stockée à l'aide de la ExecuteScalar() méthode. Vous pouvez ensuite lancer le résultat de cette booléenne.
e.g
Cela fonctionne pour moi, et est basé sur cette réponse https://stackoverflow.com/a/3232556/1591831 à l'aide d'un SqlDataAdapter (notez que vous n'avez pas besoin d'utiliser un) et ExecuteScalar (vous pouvez utiliser la méthode ExecuteNonQuery comme illustré ici):
Je suppose que cela dépend de la logique de la db correspondant de la fonction (ps/udf) a à exécuter.
Si, par exemple, nous nous sommes intéressés au nombre de fois que le particulier db de la fonction a été exécutée, nous aurions vraiment besoin de faire quelques manipulation des données et les mises à jour sur les différentes tables. Par conséquent, nous devrions avoir à aller pour les procs ici. Si c'est un simple récupération d'un fichier udf va faire.
le résoudre avec une procédure stockée est mieux dans le long terme, car il est plus souple et adaptable
je l'utiliser sql fonction scalaire
puis c'est mon code c#
mon code C# ignore la fonction