SaiYan5102
Messages postés69Date d'inscriptionvendredi 20 novembre 2009StatutMembreDernière intervention15 mars 2011
-
26 nov. 2009 à 14:55
SaiYan5102
Messages postés69Date d'inscriptionvendredi 20 novembre 2009StatutMembreDernière intervention15 mars 2011
-
27 nov. 2009 à 15:09
Bonjour,
Je travail actuellement sur un système de réservation en C# et pour se faire j'ai pour but de récupérer l'identifiant de la session windows pour ensuite m'en servir dans une requête SQL pour récuperer les lignes où le champ login de la table soit égale à cet identifiant. Je suis stagiaire dans une entreprise et le problème est que l'on m'a dit de faire de telle manière, en créant un paramètre (DbParameter) mais je ne comprend vraiment pas le principe...Je cherche depuis 2 jours sur internet mais sans aucune progression. Et là personne qui a "commencé" celà comme ça n'est jamais là donc je dois me débrouiller absolument mais la je désespère a obtenir le résultat que je désire. Je vais donc essayer de vous faire voir un peu mon code et ce que je veux y faire, en éspèrant réussir à me faire comprendre pour avoir un peu d'aide.
J'ai une classe Defautl.apx.cs où se trouve ce code (récuperation du login de session windows) :
namespace ProcessReservation
{
public class ProAnnuaire
{
public List GetAllAnnuaire()
{
DaAnnuaire da = new DaAnnuaire();
return da.GetAllAnnuaire();
}
public Annuaire GetAnnuaire(string login)
{
DaAnnuaire da = new DaAnnuaire();
return da.GetAnnuaire(login);
}
}
}
Et dans ma page Default.aspx j'affiche mon ObjectDataSource comme ceci :
Et si j'exécute le projet tel qu'il est actuellement j'obtiens l'erreur suivante : ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'GetAnnuaire' that has no parameters.
Je ne sais pas si je suis clair dans mon explication, je souhaite tout simplement récupérer le login windows (1ere classe) et ensuite allez m'en servir dans ma requête SQL de la méthode GetAnnuaire e la classe DaAnnuaire.
J'ai vraiment du mal avec ce type de fonctionnement (process, DA, BO) mais je dois faire comme ceci.
Pouvez-vous m'aider et même m'éclairer un peu plus sur ce fonctionnement, qui doit être courant en C# apparemment.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 26 nov. 2009 à 15:09
Salut
Ton problème vient du fait que GetAnnuaire prend un paramètre (string login) que tu ne fournis pas dans ton ObjectDataSource1. Rajoute un <selectparameters> pour fournir le paramètre login.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
SaiYan5102
Messages postés69Date d'inscriptionvendredi 20 novembre 2009StatutMembreDernière intervention15 mars 20111 26 nov. 2009 à 15:34
Tu es toujours très rapide à répondre krimog ^^
J'ai donc mis
<SelectParameters>
</SelectParameters>
J'obtiens désormais l'ereur suivante : The parameterized query '(@login nvarchar(4000))SELECT * FROM annuaire_new WHERE login = ' expects the parameter '@login', which was not supplied.
Mais comment ça le paramètre n'est pas fourni ? Je m'y prend mal ? (selon le code de ma class DaAnnuaire que j'ai posté).
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 26 nov. 2009 à 17:24
J'avoue ne pas parfaitement connaître la syntaxe des paramètres, mais dans ton exemple, tu n'as pas donné de valeur à ton paramètre (tu as juste donné le nom et le type)
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
Tout cela est bien flou pour moi :/. D'aspect ça parait pourtant simple, récupérer un login, le stocker dans une variable puis le passer en paramètre de fonction... piouuu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 26 nov. 2009 à 19:49
C'est pas la valeur de param0 dont je parle mais la valeur de login en l'occurrence.
En gros
DataObjectSource <=1=> ProAnnuaire.GetAnnuaire(login) <=2=> DaAnnuaire.GetAnnuaire(login) <=3=> Base de données
La liaison <=1=> indique la méthode à appeler via SelectMethod et TypeName, mais n'indique pas la valeur de "login" et c'est ça ton erreur.
La liaison <=2=> c'est du code simple et ça transmet son paramètre login à l'autre méthode.
La liaison <=3=> c'est du SQL et ça transmet la valeur du login là où tu l'as indiqué dans ton dernier post.
Mais le problème est bel et bien au niveau de la liaison 1 : il faut pouvoir indiquer à ProAnnuaire.GetAnnuaire(string login) quelle valeur tu choisis pour login.
Comme je te le disais, je n'ai pas des tonnes de connaissances en ce qui concerne les ObjectDataSource, donc je ne peux pas te dire la syntaxe exacte, mais google le peut certainement ;)
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
SaiYan5102
Messages postés69Date d'inscriptionvendredi 20 novembre 2009StatutMembreDernière intervention15 mars 20111 27 nov. 2009 à 09:22
Ok donc si je comprend bien il faut que je cherche comment passer la valeur à la méthode ProAnnuaire.GetAnnuaire(string login) via le code de la page aspx, c'est bien ca ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 27 nov. 2009 à 10:24
C'est pas login ou "login" qu'il faut que tu lui passes, c'est une valeur !!
Ta requête, au final, c'est
SELECT * FROM annuaire_new WHERE login = @login;
Mais il faut bien que tu précises la valeur de @login à un moment où à un autre. Dans tout ton programme, tu te trimbales une variable de méthode en méthode, mais tu ne passe pas de valeur à ta 1ère méthode !!
Avec tes modifs, DataSourceObject1 dit que login = "login", puis il transmet cette valeur à ProAnnuaire qui la transmet à DaAnnuaire donc ta requête sera la suivante :
SELECT * FROM annuaire_new WHERE login = 'login';
Si tu souhaites que ta requête soit
SELECT * FROM annuaire_new WHERE login = 'toto';
il faut mettre "toto" en DefaultValue de ton AspParameter
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
SaiYan5102
Messages postés69Date d'inscriptionvendredi 20 novembre 2009StatutMembreDernière intervention15 mars 20111 27 nov. 2009 à 10:37
Ok, si j'écris en dur un login du genre DefaultValue="toto" ca me retourne bien la ligne de la table qui a toto comme login mais moi je voudrai que ca s'adapte selon l'utilisateur connecté, donc pas lui passé une chaine de caractère mais bien une variable, et ici en l'occurrence ma variable login qui a récupéré le login de session windows.
Je ne dois plus être si loin :/
Donc il passerait la valeur de la variable login au parametre nommé login de l'obet ObjectDataSource1. Du moins moi je vois ca comme cela.
J'ai maintenant cette erreur : ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'GetAnnuaire' that has parameters: login, login1.
Et là je suis blazé...une collègue vient de me montrer que en deux cliques avec l'assistant mon problème été résolu...
A trop être habitué à tout coder de A à Z j'ai du mal à me faire aux assistants qui désormais font tout le travail à votre place dans les environnements de développement, alala.
En tout cas merci à toi krimog, à bientôt :) (pas trop tôt je vais essayer).