пытаюсь написать xml в VB.net - PullRequest
       21

пытаюсь написать xml в VB.net

0 голосов
/ 27 февраля 2019

ОБНОВЛЕНИЕ Спасибо, vlam, теперь я пишу в Stream, как ты и предлагал, я получаю XML-файл и больше никаких ошибок, мой XML-файл имеет только это, без данных,

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

Почему я неУ меня есть данные?

У меня есть сетка данных и набор данных в форме.Откроется форма, я ввожу данные в первые 2 строки, затем нажимаю кнопку записи XML, которую я добавил в форму.Код для кнопки и WriteXML здесь.Создает файл, который пуст.Но когда он пытается выполнить команду RoboDataSet.WriteXml (filename), я получаю сообщение об ошибке.

После того, как я ввожу данные в DataGridView, они сохраняются в DataGridView и DataSet в этот момент?

У меня есть окно сообщения, отображающее, что у нас есть данные, поэтому я считаю, что введенные мной данные находятся в наборе данных.Затем я делаю шаг по коду и вижу файл, созданный в c: \ data, затем по команде RoboDataSet.WriteXml (filename) я получаю эту ошибку;

Итак, несколько вопросов, почему я получаю ошибкуиспользуется, это тот же процесс, пытаясь написать xml, правильно?

Я пробовал 2 разных способа, на основе примеров MS, которые я видел,

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 голосов
/ 27 февраля 2019

Класс 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
0 голосов
/ 27 февраля 2019

Должна быть запись в поток, а не имя файла.Также пишите, только если набор данных не является ничем.

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
...