2010-09-14 5 views
0

J'ai un appel Web WCF qui renvoie le résultat d'une commande SQL.Types de retour WCF

Cependant, cette commande SQL est dynamique, donc je ne sais pas combien de colonnes et quels types de données il va y avoir. Comment puis-je les résultats sur WCF à une application Silverlight?

(BTW je veux alors être en mesure de mettre ces données dans une grille de données)

Merci

+0

utiliser quelque chose de fortement typé, comme soi-disant POCO (juste des objets habituels, mappés à DB) – Andrey

Répondre

1
Name Age Height Income 
Adam 50 175  88 
Paul 20 166  75 
Ranj 19 188  69 
Omar 25 200  45 

Devient:

Key Attribute Value 
Adam Age   50 
Adam Height  175 
Adam Income  88 
Paul Age   20 
Paul Height  175 
Paul Income  75 

Etc.

Fondamentalement, vous aplatir une table de données avec un nombre arbitraire de colonnes dans un tableau de données qui n'ont jamais 3 colonnes (ou 4 si vous vouloir inclure le type de données).

+0

comment pourriez-vous alors obtenir cela dans un DataGrid ?? –

+0

Vous pourriez essayer une grille de pivot. Je crois que DevExpress pivote. –

0

assez laid, mais vous pouvez retourner les résultats dans un DataSet, ou convertir le DataSet à un XML string (éventuellement nettoyé un peu par exemple avec XSLT).

Cependant, l'un des idéaux de WCF est les interfaces fortement typées, y compris les données renvoyées. Avec un typage faible, un client aura besoin d'informations supplémentaires pour interpréter le XML.

0

Celui-ci surgit encore et encore dans le monde des affaires.

Celui que j'ai utilisé (et je déteste avec une vengeance) était de retourner un DataSet ou une liste de listes de chaînes avec des informations d'en-tête se trouvant dans la première rangée. Puis mappez les noms de colonnes aux types de propriétés. Tous impliquent beaucoup de conversions de code et de type.

Une meilleure solution pourrait être de revenir un maximum de colonnes (pas tous toujours utilisé) fixe:

  • Créer une vue avec colonne1, colonne2 ... colonne que votre variablenoms de colonnes (jusqu'à votre maximum)
  • Toutes les colonnes fixes communes (comme clé primaire/id?) sont ajoutés normalement

Ensuite, au moins vous pouvez mapper à travers au client statiquement. Fondamentalement, un résultat SQL de mise en page variable est préférable d'éviter si possible.

Bonne chance!

0

Pour moi une telle architecture rappe des services Web. Comment voulez-vous utiliser des données avec une structure et des types de données inconnus? Si vous avez besoin de retourner des données génériques, utilisez XElement ou XmlElement comme type de retour de votre opération et convertissez le résultat en XML (manuel, sérialisation, sélection FOR XML, ...).

Questions connexes