-1

我是 .NET 编程和 Visual Basic 的新手,我对此一无所知。我有下一个代码:

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim cnn As New SqlConnection("Server=adserver;uid=sa;pwd=1234;dat abase=empatic")
        Dim da As New SqlDataAdapter("select * from producte for xml path('producte'),     root('Productes')", cnn)
        Dim ds As New DataSet        
        da.Fill(ds)

        DataGridView1.DataSource = ds.Tables(0)
        Dim a As String = ds.Tables(0).ToString

    End Sub
End Class

此代码的作用是连接到 SQL Server 并执行查询。此查询在 GridViewer 的单个 XML 行中生成。我的问题是:如何在 VB 中获取信息,向我展示 xml 形状而不是单行。

所有这一切的最终目的是VB连接到SQL Server并单击一个按钮程序向我显示我使用查询生成的xml。

4

2 回答 2

1

要以可导航的树格式查看 XML,您应该使用TreeView 控件。为了设置数据源,您还需要将 XML 放入TreeNodes的集合中。下面是我如何做到这一点,通过制作一个 XmlDocument,然后使用转换函数来制作 TreeNode:

使用SqlDataReader将查询的输出选择到字符串变量中,然后您可以像这样填充 TreeView:

Try
  Dim xsd As XmlDocument = New XmlDocument()
  xsd.LoadXml(myXmlString)
  ConvertXmlNodeToTreeNode(xsd.FirstChild, myTreeView.Nodes)
  myTreeView.Nodes(0).ExpandAll() 'expand the root
Catch ex As Exception
  Throw New Exception("Failed to create XmlDocument", ex)
End Try

转换功能:

Private Sub ConvertXmlNodeToTreeNode(ByVal xmlNode As XmlNode, ByVal treeNodes As TreeNodeCollection)
  Dim newTreeNode As TreeNode = treeNodes.Add(xmlNode.Name)

  Select Case xmlNode.NodeType
    Case XmlNodeType.ProcessingInstruction, XmlNodeType.XmlDeclaration
      newTreeNode.Text = "<?" + xmlNode.Name + " " +
      xmlNode.Value + "?>"
    Case XmlNodeType.Element
      newTreeNode.Text = "<" + xmlNode.Name + ">"
    Case XmlNodeType.Attribute
      newTreeNode.Text = "ATTRIBUTE: " + xmlNode.Name
    Case XmlNodeType.Text, XmlNodeType.CDATA
      newTreeNode.Text = xmlNode.Value
    Case XmlNodeType.Comment
      newTreeNode.Text = "<!--" + xmlNode.Value + "-->"
  End Select

  If Not IsNothing(xmlNode.Attributes) Then
    For Each attrib As XmlAttribute In xmlNode.Attributes
      ConvertXmlNodeToTreeNode(attrib, newTreeNode.Nodes)
    Next
  End If
  For Each childNode As XmlNode In xmlNode.ChildNodes
    ConvertXmlNodeToTreeNode(childNode, newTreeNode.Nodes)
  Next
End Sub
于 2013-01-18T21:34:03.947 回答
0

您想要 XML 格式的数据吗?如果没有,只需for xml path...从 SQL 语句中删除 。例如,您可以这样做:

Dim da As New SqlDataAdapter("select * from producte", cnn)

如果您确实希望它为 XML,那么您可以使用几种不同的选项来解析 XML。以下是最常见的选项:

于 2013-01-18T21:22:18.290 回答