【问题标题】:trying to writeXml in VB.net试图在 VB.net 中编写 XML
【发布时间】:2019-02-27 05:48:44
【问题描述】:

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

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

为什么我没有数据?

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

为什么我没有数据?

【问题讨论】:

  • 您将.WriteXML(Stream) 重载与.WriteXML(String) Either will work but when you created a stream, the stream is busy using the created file. So, when you tried to use the .WriteXML(String)` 混合使用,它将失败。

标签: vb.net writexml


【解决方案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

【讨论】:

  • 检查DataSet是否为Nothing与是否包含任何数据无关。
  • 我的错,应该检查什么。非空数据集。
【解决方案2】:

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

【讨论】:

  • 我使用了 Vlam 的答案,但我没有得到一个包含这个的 XML 文件;
  • 谢谢,我正在使用 Vlam 的建议并将添加您的建议,但现在我得到了一个 xml 文件,其中只有这个;
  • 我怀疑您的数据集中没有数据。查看我的编辑以检查。
  • 您的编辑没有显示任何内容,但我输入了数据我尝试使用绑定和未绑定的 datagridview 并且没有明显变化我错过了一些新的东西
  • 我认为您需要一个新问题来显示用于创建 DataSet 的代码以及它如何绑定到 DataGridView。解释数据是如何输入的,并询问为什么它没有出现在 DataSet 中。
猜你喜欢
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多