试图在 VB.net 中写入 Xml

trying to writeXml in VB.net

更新 谢谢 vlam,我现在正在按照你的建议写入 Stream,我得到一个 XML 文件并且没有更多错误,我的 XML 文件只有这个,没有数据,

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

为什么我没有数据?

我在表单上有一个数据网格视图和一个数据集。表单打开,我在前两行键入数据,然后单击我添加到表单的写入 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 文件只有这个,没有数据,

为什么我没有数据?

应该写入流而不是文件名。也只有在数据集不是什么的时候才写。

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 class 实现了 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