繁体   English   中英

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

[英]Ado.net iterating through each column in row of SqlDataReader

我正在编写一个简单的XML Web服务,并希望返回原始XML。 我这样做是通过创建一个表示XML的字符串文字。 我的数据源是一个SqlDataReader对象,它包含存储的proc调用的结果。 我现在这样做的方法是使用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>")

问题是存储过程中返回的十几个字段并将它们写出来似乎效率低下。 有没有办法迭代每一行获取列名和值,所以我可以做这样的事情:

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

谁能建议我怎么做? 谢谢!

这应该工作(仅为了完整性添加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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM