Ado.net перебирает каждый столбец в строке SqlDataReader - PullRequest
1 голос
/ 19 марта 2012

Я пишу простой XML-веб-сервис и хочу вернуть необработанный XML. Я делаю это путем создания строкового литерала, который представляет XML. Мой источник данных - это объект SqlDataReader, который содержит результаты сохраненного вызова процедуры. Я делаю это прямо сейчас, используя цикл while и читая значения из свойства элемента следующим образом:

'string builder to create the literal
Dim sb As New StringBuilder()
sb.Append("<?xml version='1.0' encoding='ISO-8859-1'?>")
sb.Append("<members>")

'dr is an instance of SqlDataReader
While (dr.Read())
    sb.Append("<member>")
    sb.Append(String.Concat("<PersonnelID>", dr.Item("PersonnelID"), "</PersonnelID>"))
    sb.Append(String.Concat("<FirstName>", dr.Item("FirstName"), "</FirstName>"))
    sb.Append("</member>")
End While
sb.Append("</members>")

Проблема в том, что есть более дюжины полей, которые возвращаются из сохраненного процесса, и выписывание каждого из них, как это, кажется неэффективным. Есть ли способ перебирать каждую строку, получая имя столбца и значение, чтобы я мог сделать что-то вроде этого:

sb.Append(String.Concat("<",ColName,">", dr.Item(ColName), "</",ColName,">"))

Кто-нибудь может подсказать, как я мог это сделать? Спасибо!

1 Ответ

3 голосов
/ 19 марта 2012

Это должно сработать (добавлен оператор использования только для полноты):

Using dr = cmd.ExecuteReader()
    Dim sb As New System.Text.StringBuilder()
    sb.Append("<?xml version='1.0' encoding='ISO-8859-1'?>")
    sb.Append("<members>")
    While (dr.Read())
        sb.Append("<member>")
        For i = 0 To dr.FieldCount - 1
            sb.Append(String.Format("<{0}>{1}</{0}>", dr.GetName(i), dr(i)))
        Next
        sb.Append("</member>")
    End While
    sb.Append("</members>")
End Using
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...