试图在VB.net中写Xml

时间:2019-02-27 05:48:44

标签: vb.net writexml

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

<?xml version="1.0"?>
<RoboDataSet/>

为什么我没有数据?

我在表单上有一个datagridview和一个数据集。表单打开,我在前两行中输入数据,然后单击添加到表单中的写入XML按钮。按钮和WriteXML的代码在这里。它创建一个文件,该文件为空。但是,当它尝试执行RoboDataSet.WriteXml(filename)命令时,出现错误。

我在DataGridView中键入数据后,它是否保存在此时的DataGridView和DataSet中?

我有一个消息框,显示我们有数据,所以我相信我输入的数据在数据集中。然后,我执行代码,然后看到在c:\ data中创建的文件,然后在RoboDataSet.WriteXml(filename)命令上收到此错误;

有几个问题,为什么我会得到使用的错误,这是尝试写xml的相同过程,对吗?

根据我看到的MS示例,我尝试了2种不同的方式,

Example 1
Dim stream As New System.IO.FileStream _
    (filename, System.IO.FileMode.Create)
 thisDataSet.WriteXml(stream)

Example 2
Dim filename As String = "XmlDoc.xml"
thisDataSet.WriteXml(filename)

这是我的代码不起作用;

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文件中只有这个文件,没有数据,

为什么我没有数据?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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