bjr,
j’essaye d’interroger une bdd SQLSERVER depuis Silverlight à travers un web service PHP.
Le code du fichier select.php qui me retourne le résultat d'une requête :
ce scripte me retourne la chaine JSON suivante par exemple pour une requête donnée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 include 'sqlserver_vars.php'; $Requete = $_GET['Requete']; if($Requete != NULL and $Requete != "") { $connection = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ; $Resultat= odbc_exec($connection, $Requete); /**/ $NbrChamps = odbc_num_fields($Resultat); //----------------------------------------------------------- if($NbrChamps > 0) { //----------------------------------------------------------- $type = array(); for($i=1;$i<=$NbrChamps;$i++) { $lig = array(); array_push($lig,odbc_field_name($Resultat,$i),odbc_field_type($Resultat,$i)); array_push($type,$lig); } //----------------------------------------------------------- //----------------------------------------------------------- $data = array(); while($itemRow = odbc_fetch_row($Resultat)) { $lig = array(); for($i=1;$i<=$NbrChamps;$i++) { $val = utf8_encode(odbc_result($Resultat,$i )); array_push($lig,$val); } array_push($data,$lig); } //----------------------------------------------------------- $type_data = array("Type" => $type,"Data" => $data,); echo json_encode($type_data); } //----------------------------------------------------------- odbc_close($connection); }
Une fois cette chaine récupérée coté Silverlight j'utilise le Array "Type" pour créer un type (Classe) dynamique avec les réflexions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 { "Type": [ ["CODE_MOTIF","smallint"], ["REF_MOTIF","nvarchar"], ["DES_MOTIF","nvarchar"], ["CALC_CMUP","smallint"] ] , "Data": [ ["1","VENTE","Vente","0"], ["2","ACHAT","Achat","1"], ["3","PERTE","Perte","0"], ["4","RETOUR","Retour","0"] ] }
Puis
Pour chaque élément (Array) du Array "Data" je crée une instance de la classe dynamique créée précédemment et je SET les propriétés une à une et je constitue une liste d'objets prêts à être bindée.
le problème:
la récupération des Strings me pose problème de parsing
pour une chaine String = Ecran 15" TFT/LED
JSON la code en --> "Ecran 15\" TFT\/LED"
du coté Silverlight je fait ceci pour la récupérer :
à remarquer que chaque \ est doublé après le ToString()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //Champ est un JsonValue qui contien la chaine ""Ecran 15\" TFT\/LED"" string valeure_champ = Champ.ToString().Substring(1, Champ.ToString().Length - 2);//.Replace("\\",""); //valeure_champ contien maintenant "Ecran 15\\" TFT\\/LED"
je ne veux pas utiliser le Replace("\\","") parce que si ma chaine contiens un \\ qui ne viens pas du résultat de l'encodage il seras supprimé
je me prend la tète depuis hier sans pouvoir arriver à une solution propre.
PS. je suis débutant avec php et JSON
Partager