cyberice67
Messages postés88Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 7 novembre 2016
-
9 mai 2005 à 13:38
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
10 mai 2005 à 00:08
Bonjour,
J'ai créé une procedure à l'intérieur de mon service web qui recoit
plusieurs variables (byval) et j'aimerai pouvoir renvoyer ces variables
modifiée a l'application utilisant ce service. (J'ai essayé un passage
par référence mais ca n'a rien donné... en gros ce qu'il me faut c'est
mettre mes variable en entrée/sortie).
Voici le code de mon service:
<WebMethod()> Public Sub PSCAvaleur(ByVal i As
Integer, ByVal PrenP As String, ByVal Sexe As String, ByVal Classe As
String, ByVal Autorise As Integer)
Dim cmdset As New SqlClient.SqlCommand
Dim compteur As Integer
cmdset.Connection = cnn
cmdset.CommandType = CommandType.StoredProcedure
cmdset.CommandText = "PSCAvaleur"
cnn.Open()
Dim Reader As SqlClient.SqlDataReader = cmdset.ExecuteReader
compteur = 0
While compteur <> i
Reader.Read()
PrenP = Reader.GetString(0)
Sexe = Reader.GetString(1)
Classe = Reader.GetString(2)
Autorise = Reader.GetInt32(3)
compteur = compteur + 1
Reader.Read()
End While
End Sub
Et voici l'appel à partir de mon application web :
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 9 mai 2005 à 14:10
re,
tu as le choix pour ca.... tu peux par example faire une fonction qui te renvoie un dataset .. ou autre...
dans l'example qui suit, je renvoie une arraylist
<WebMethod()> Public Function PSCAvaleur(ByVal i As Integer, ByVal PrenP As String, ByVal Sexe As String, ByVal Classe As String, ByVal Autorise As Integer) as Arraylist
Dim sResults as Arraylist = new Arraylist()
Dim cmdset As New SqlClient.SqlCommand
Dim compteur As Integer
cyberice67
Messages postés88Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 7 novembre 2016 9 mai 2005 à 19:01
Merci Jesusonline et YopYop pour votre aide, je vais testé ça ce soir :)
ta réponse m'a fait rire Jesus, ca parait si évident quand j'la lis :D Faudra que je test...
Pour répondre à ta question Yep Yep la boucle sert à aller sur l'enregistrement numéro X (X étant la valeur de la variable INDEX que l'on passe en parametre). Si t'as un système D plus simple ?
j'ai pensé à faire :
while compteur < i
MonReader.read()
wend
puis affecter les valeurs...
MERCI ENCORE
Cyberice
Vous n’avez pas trouvé la réponse que vous recherchez ?
cyberice67
Messages postés88Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 7 novembre 2016 9 mai 2005 à 19:51
JesusOnline,
J'ai un petit problème avec ta solution... Voici ce que j'ai tenté :
<WebMethod()>
Public
Function PSCAvaleur(
ByVal i
As
Integer,
ByVal PrenP
As
String,
ByVal Sexe
As
String,
ByVal Classe
As
String,
ByVal Autorise
As
Integer)
As double
Dim Reader
As SqlClient.SqlDataReader = cmdset.ExecuteReader
compteur = 0
While compteur <> i
Reader.Read()
PrenP = Reader.GetString(0) 'renvoie CHRIS
Sexe = Reader.GetString(1) 'renvoie M
Classe = Reader.GetString(2) ' renvoie 2TIGD
Autorise = Reader.GetInt32(3) 'renvoie 1
compteur = compteur + 1
Reader.Read()
End
While
Return PrenP + Sexe + Classe + Autorise
End
Function
Quand j'execute il me dit :
System.InvalidCastException: Cast de la chaîne "CHRISm2tigd" en type 'Double' non valide. ---> System.FormatException: Le format de la chaîne d'entrée est incorrect.
at Microsoft.VisualBasic.CompilerServices.DoubleType.Parse(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value, NumberFormatInfo NumberFormat)
--- Fin de la trace de la pile d'exception interne ---
at Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.DoubleType.FromString(String Value)
at AP4.Service1.PSCAvaleur(Int32 i, String PrenP, String Sexe, String Classe, Int32 Autorise) in d:\inetpub\wwwroot\AP4\Service1.asmx.vb:line 153
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 9 mai 2005 à 20:00
t'as compris ma solution ???
l'erreur vient de cette ligne et c'est évident !
Return PrenP + Sexe + Classe + Autorise
PrenP, Sexe, Classe, sont de type string tu lui rajoutes un integer
heureusement VB.net est trés gentil !!!
mais aprés le type de la fonction est double, et on peut pas, caster des string en double ...
pour faire comme je t'ai dit, il faut changer le type, mettre comme l'a dit YopYop, un arraylist, ou un dico ou meme une string concatené ...
petite remarque, niveau optimisation, t'as mis Sexe as string, jusqu'a preuve du contraire, il n'y a que deux cas possible, donc met plutot un boolean, ou au pire un integer ...
cyberice67
Messages postés88Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 7 novembre 2016 9 mai 2005 à 20:47
Oui maintenant je vois c'que tu voulais dire :)
Ce que j'avais en tete de faire c'est l'entrée/sortie => modifié les
valeur qui sont pointées par les variable transmisent en parametre
directement en mémoire... mais j'pense pas qu'un service web accepte
ca...
Sinon comme tu me l'as conseillé j'ai essayé de mettre en place un
ArrayList et ca marche très bien sauf que lorsque je recupére
l'arraylist de ma fonction (contenu ds les service web), il ne veut pas
me l'affectée. En clair ca donne :
//appel de PSCAvaleur => Renvoie un ArrayList
ArrayList MonArray = new
ArrayList();
MonArray =
MonService.PSCAvaleur(1);
Il me met "Impossible de convertir implicitement le type 'object[]' en 'System.Collections.Arraylist'
Un peu con comme truc vu que j'affecte une fonction retournant un
arraylist à une variable local de mon application web qui se trouve
etre aussi une Arraylist..
Ps : mon service web est en vb.net et mon application web en ASP.net
(mais bon ca doit pas venir de là vu qu'y'a SOAP entre les deux...)
cyberice67
Messages postés88Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 7 novembre 2016 9 mai 2005 à 23:38
Merci pour ta réponse... Elle ne marche pas directement mais en fouinant j'pense avoir trouvé !
Voici ma solution :
ArrayList MonArray =
new ArrayList();
MonArray = ArrayList.Adapter(MonService.PSCAvaleur(1));
J'espere que ca fait bien une affectation des valeurs transmisent... Mais now je seche sur la maniere de récupérer ces valeurs à partir de la arraylist, en vb c'est pas dur mais en C# j'connais pas la syntaxe et les méthodes de ma variable arraylist me parlent pas vraiment...
Si t'as une idée j'suis preneur...
Ps : quand ca marchera j'mettrai mon projet sur code-source pcq j'trouve pas enormement d'infos dessus...
Si ca marche pas comme ca au lieu de faire un ArrayList, car la t'en as pas besoin, fais un string()
<WebMethod()> Public Function PSCAvaleur(ByVal i As Integer) as string()
Dim sResults(3) as string
Dim cmdset As New SqlClient.SqlCommand
Dim compteur As Integer