Ado.net 遍历 SqlDataReader 行中的每一列

The*_*hod 3 vb.net ado.net visual-studio-2010

我正在编写一个简单的 XML Web 服务并希望返回原始 XML。我通过创建一个表示 XML 的字符串文字来做到这一点。我的数据源是一个包含存储过程调用结果的 SqlDataReader 对象。我现在这样做的方法是使用 while 循环并从 item 属性中读取值,如下所示:

'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>")
Run Code Online (Sandbox Code Playgroud)

问题是有十多个字段从存储的 proc 返回,并且像这样写出每个字段似乎效率低下。有没有办法遍历每一行获取列名和值,所以我可以做这样的事情:

sb.Append(String.Concat("<",ColName,">", dr.Item(ColName), "</",ColName,">"))
Run Code Online (Sandbox Code Playgroud)

谁能建议我如何做到这一点?谢谢!

Tim*_*ter 5

这应该有效(添加 using 语句只是为了完整性):

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
Run Code Online (Sandbox Code Playgroud)