Une solution est d'écrire un déclencheur « avant INSERT » qui appliquera les règles d'affaires en vérifiant le nombre d'étudiants sont facilement enregistrés pour la etc. classe) et empêcher la insérer pour avoir lieu. Cette condition d'erreur peut ensuite être détectée à des niveaux plus élevés et un message d'erreur approprié est fourni à l'utilisateur. En relisant votre question, la règle de gestion pourrait aussi bien être vérifiée dans la procédure stockée que vous avez mise en place, il suffirait alors de faire retourner la procédure du magasin par un code de condition (disons un entier: 0) = insérer ok et -1 = la classe est pleine), et tester cette valeur au niveau de l'application.
Edit: plus de détails (mais pas tout à fait le code complet ...)
Yuvraj, ce que je voudrais vous mettre a l'air sérieux comme devoirs, donc sur la bonne voie, mais aussi laissez-vous y travailler assez que vous apprenez le processus de comprendre les choses.
En ce qui concerne la procédure Store (SP), bniwredyc vous facilement à condition que le code: Il est une légère modification par rapport à ce que vous avez dans votre question:
@minDelegate int,
@maxDelegate int
set @delegatesCount = (select count(*) from tblDelegate
where CourseID = @CourseId)
if (@delegatesCount >= maxDelegate)
return -1
Essentiellement, vous ajoutez 2 arguments supplémentaires à la procédure: minDelegate et maxDelegate et retournent prématurément à partir de la procédure, avec une valeur de retour -1, dans le cas où il y a trop de délégués. (1 dans l 'exemple de bniwredyc, mais je préfère les valeurs négatives pour les conditions d' erreur). Je ne pense pas que minDelegate soit utilisé du tout; vous savez mieux quelles règles doivent être appliquées ...
Maintenant, vous devez écrire un programme VB qui appellera ce SP au moyen de ADO. Cela impliquera l'utilisation de l'objet ADODB.Command Ce Microsoft MSDN page fournit des informations de référence sur cet objet et en suivant quelques liens pas très loin de cette page, vous trouverez également des détails sur l'objet Connection et l'objet RecordSet.
Une procédure stockée peut renvoyer des données à la méthode appelante de trois manières différentes.
1. By returning an integer value in the RETURN value. This value is
the return value of the Command object's Execute() method.
This is the simpler approach and can be used in your case
2. By returning values (integer, text or other) in one or several OUTPUT
Parameters
3. By returning a recordset
Method 2 can be combined with 1 or 3, however 1 and 3 are mutually
exclusive since they both use return value of the Execute() method
to provide an integer (1) or a Recordset (3).
L'exemple à this page montre +/- tout ce que vous aurez besoin, mais il utilise un jeu d'enregistrements pour les données, ce qui est pas nécessaire dans votre cas; Au lieu de cela, utilisez une valeur entière pour stocker la valeur de retour de Execute() et testez-la. Si 0: enregistrement a été ajouté ok, If-1: échec du test "too many".
Maintenant, mettez-vous au travail :-) et s'il vous plaît, posez vos questions comme "Devoirs", le cas échéant.
Merci! Puis-je avoir un exemple de code pour Proc et Vb.net? –
Il suffit de créer un proc stocké qui retourne une seule ligne et une seule cellule qui contient le nombre de délégués. Appelez ce sp à partir de votre code vb comme vous le feriez pour n'importe quelle autre table renvoyant le sproc. Ensuite, dans votre code vb, regardez la valeur et prenez une décision en fonction de sa valeur. –