2012-03-19 82 views
1

我正在編寫一個簡單的XML Web服務,並希望返回原始XML。我通過創建一個表示XML的字符串來實現這一點。我的數據源是一個包含存儲過程調用結果的SqlDataReader對象。我現在正在做它的方式是使用while循環和讀取值從項目屬性,象這樣:Ado.net遍歷SqlDataReader行中的每一列

'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,">")) 

任何人都可以建議我怎麼能做到這一點?謝謝!

回答

3

這應該工作(添加使用語句只是爲了完整起見):

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