Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在VB.net中编写XML_Vb.net_Writexml - Fatal编程技术网

尝试在VB.net中编写XML

尝试在VB.net中编写XML,vb.net,writexml,Vb.net,Writexml,更新 谢谢vlam,我现在按照您的建议向Stream写信,我得到了一个XML文件,没有更多的错误,我的XML文件只有这个,没有数据 <?xml version="1.0"?> <RoboDataSet/> 这是我不起作用的代码 Private Sub WriteXml_Click(sender As Object, e As EventArgs) Handles WriteXml.Click WriteXmlToFile(RoboDataSet) End Sub

更新 谢谢vlam,我现在按照您的建议向Stream写信,我得到了一个XML文件,没有更多的错误,我的XML文件只有这个,没有数据

<?xml version="1.0"?>
<RoboDataSet/>
这是我不起作用的代码

Private Sub WriteXml_Click(sender As Object, e As EventArgs) Handles WriteXml.Click
    WriteXmlToFile(RoboDataSet)
End Sub

Private Sub WriteXmlToFile(RoboDataSet As DataSet)
    If RoboDataSet Is Nothing Then
        MessageBox.Show("dataset empty")
    Else
        MessageBox.Show("We have data")
    End If
    Dim filename As String = "c:\data\write4.xml"
    Dim Stream As New System.IO.FileStream _
        (filename, System.IO.FileMode.Create)
    RoboDataSet.WriteXml(filename)




End Sub
任何帮助都会很好,谢谢

谢谢vlam,我现在按照您的建议向Stream写信,我得到了一个XML文件,没有更多的错误,我的XML文件只有这个,没有数据


为什么没有数据?

应该写入流,而不是文件名。也仅当数据集不是空时才写入

Private Sub WriteXmlToFile(RoboDataSet As DataSet)
    If RoboDataSet Is Nothing Then
        MessageBox.Show("dataset empty")
    Else
        MessageBox.Show("We have data")
        Dim filename As String = "c:\data\write4.xml"
        Dim Stream As New System.IO.FileStream(filename, System.IO.FileMode.Create)
        RoboDataSet.WriteXml(Stream)
    End If
End Sub

FileStream类实现IDisposable,因此需要关闭并释放它。(避免非托管资源、文件句柄等泄漏)

即使有错误,Using块也会处理这个问题

这个答案与@Vlam的答案相同,只是添加了Using块@Vlam是诊断错误的人,因此请接受该答案,但一定要添加Using块

Private Sub WriteXmlToFile(RoboDataSet As DataSet)
    If RoboDataSet Is Nothing Then
        MessageBox.Show("The DataSet does not exist.")
        Return
    End If
    '**EDIT**
    For Each t As DataTable In RoboDataSet.Tables
        Debug.Print(t.Rows.Count.ToString)
    Next
    '**END EDIT**

    Dim filename As String = "c:\data\write4.xml"
    Using Stream As New System.IO.FileStream(filename, System.IO.FileMode.Create)
        RoboDataSet.WriteXml(Stream)
    End Using
End Sub

检查数据集是否为Nothing与它是否包含任何数据无关。我的错误是,应该检查Nothing。数据集不是空的。您已将
.WriteXML(流)
重载与
混合。WriteXML(字符串)也可以工作,但创建流时,流正忙于使用创建的文件。因此,当您尝试使用
.WriteXML(String)`时,它将失败;谢谢,我正在使用Vlam的建议,并将添加您的建议,但现在我得到了一个xml文件,其中仅包含此内容;我怀疑您的数据集中没有数据。查看我的编辑以进行检查。您的编辑没有显示任何内容,但我输入了数据。我尝试使用datagridview绑定和未绑定,没有任何更改。显然,我缺少一些新的内容。我想您需要一个新问题,显示您用于创建数据集的代码以及它如何绑定到datagridview。解释数据是如何输入的,并询问为什么数据集中没有显示数据。
Private Sub WriteXmlToFile(RoboDataSet As DataSet)
    If RoboDataSet Is Nothing Then
        MessageBox.Show("The DataSet does not exist.")
        Return
    End If
    '**EDIT**
    For Each t As DataTable In RoboDataSet.Tables
        Debug.Print(t.Rows.Count.ToString)
    Next
    '**END EDIT**

    Dim filename As String = "c:\data\write4.xml"
    Using Stream As New System.IO.FileStream(filename, System.IO.FileMode.Create)
        RoboDataSet.WriteXml(Stream)
    End Using
End Sub