РЕДАКТИРОВАТЬ: см. Ниже
У меня есть веб-сервис, который использует класс функций для возврата данных, используемых в различных бизнес-процессах (через InfoPath).
Одна из функций берет заданный объект SQLCommand и выполняет его в SQLDataReader. Теперь, в зависимости от используемого текста команды SQL, это может вернуть одну или несколько строк одного или нескольких столбцов. Так что это лучший класс для этой функции, чтобы возвращать, учитывая, что она должна быть сериализована веб-сервисом.
Мой существующий код:
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
Теперь я знаю, что это не эффективный код, но эта работа еще не завершена.
Как вы, вероятно, можете видеть, это генерирует строковый массив для представления строки с более чем одним столбцом, однако он не может быть сериализован веб-службой.
Итак, 2 вещи действительно;
- Некоторые рекомендации по использованию эффективного типа (без написания моего сериализуемого класса)
- Несколько советов по улучшению кода в будущем.
Заранее спасибо
EDIT:
Мне удалось заставить сериализацию работать, просто создав вложенный arrayList следующим образом (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
Однако, пожалуйста, дайте мне знать, как это можно улучшить.