【问题标题】:Use SQLXML with VB.NET在 VB.NET 中使用 SQLXML
【发布时间】:2013-01-18 20:06:48
【问题描述】:

我是 .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。

【问题讨论】:

  • 这是什么类型的应用程序(Winforms、Web 等)?另外,我确实希望您的连接字符串不包含实际的 sa 密码。如果是这样,您应该立即更改它(无论是在问题中还是在您的服务器上,考虑到值是什么)。
  • 您好,感谢您的回答@EsotericScreenName。首先,密码不是我的服务器的实际密码。该项目是 Winforms。
  • 谢谢,很高兴听到这个消息:)

标签: sql-server xml vb.net ado.net sqlxml


【解决方案1】:

要以可导航的树格式查看您的 XML,您应该使用the TreeView control。为了设置数据源,您还需要将您的 XML 放入 TreeNodes 的集合中。下面是我如何做到这一点,通过制作an 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

【讨论】:

  • 非常感谢!!!我已经更改了您推荐的一些内容,并且可以正常工作!现在,我必须将视图的结果导出到 XML 文档。你能帮我吗?
  • @polgrana 你应该发布一个关于这个的新问题。
【解决方案2】:

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

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

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

【讨论】:

  • 感谢@Steven Doggart!我搜索了 XDocument,它运行良好!
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多