EDIT: Voir ci-dessousQuelle classe pour les tableaux multidimensionnels sérialisables?
J'ai un service Web qui utilise une classe de fonctions afin de renvoyer des données utilisées dans divers processus d'affaires (via InfoPath).
L'une des fonctions prend un objet SQLCommand donné et l'exécute dans un SQLDataReader. Maintenant, selon le texte de la commande SQL utilisé, cela peut renvoyer une ou plusieurs lignes d'une ou plusieurs colonnes. Alors quelle est la meilleure classe pour cette fonction pour revenir en gardant à l'esprit qu'il doit être sérialisé par le service Web.
Mon code existant est:
Dim array As New ArrayList
Try
conCMS.Open()
Dim rdr As SqlDataReader = cmdCurrent.ExecuteReader
While rdr.Read
If rdr.VisibleFieldCount > 1 Then
Dim complexType(rdr.VisibleFieldCount - 1) As String
For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
complexType(rowIndex) = rdr(rowIndex)
Next
array.Add(complexType)
Else
array.Add(rdr(0))
End If
End While
conCMS.Close()
Return array
Catch ex As Exception
array.Add("ERROR " & ex.Message)
End Try
Return Nothing
Maintenant, je sais que ce n'est pas un code efficace, mais un travail en cours.
Comme vous pouvez probablement le voir, cela génère un tableau de chaînes pour représenter une ligne avec plus d'une colonne, mais cela ne peut pas être sérialisé par le service Web.
Donc 2 choses vraiment;
- Quelques conseils sur un type efficace d'utiliser (sans écrire une classe sérialisable de mon propre)
- Quelques conseils sur l'amélioration du code à l'avenir.
Merci à l'avance
EDIT: j'ai réussi à obtenir sérialisation au travail en créant simplement un arrayList imbriqué comme suit (doh!):
If rdr.VisibleFieldCount > 1 Then
Dim complexType As New ArrayList
For rowIndex As Integer = 0 To rdr.VisibleFieldCount - 1
complexType.Add(rdr(rowIndex))
Next
array.Add(complexType)
Else
array.Add(rdr(0))
End If
Cependant s'il vous plaît laissez-moi savoir comment cela pourrait être amélioré.
Merci John, le problème avec ceci est que ce code pourrait renvoyer un nombre inconnu de colonnes d'une table inconnue. Ce code est très faiblement couplé aux données réelles derrière. Je ne peux donc pas créer de classe fixe pour définir les données renvoyées. – Charlie
A noté votre point sur ArrayLists mais sans avoir une structure pour représenter les données je ne peux pas avoir un List (Of T) comme T devrait être Object et c'est juste une ArrayList de toute façon insn't il? – Charlie