How to get dataset items properly written to XML file

29 views Asked by At

I have managed to get my program running as I would like it to. The issue I am running into is when I write to an XML file. I feel like I have everything set up correctly to write the contents of the datatable to an XML file. While the XML file saves in the specified location, it is lacking any of the database columns or rows that I specified beforehand.

Listed below is the code:

Public Class Test


    Public Shared Sub Main()
        Dim allDrives() As DriveInfo = DriveInfo.GetDrives()
        Dim d As DriveInfo
        Dim DR1 As String = ""
        Dim DR2 As String = ""
        Dim DR3 As String = ""
        Dim DR4 As String = ""
        Dim DR5 As String = ""
        Dim DR1TotalSize, DR2TotalSize, DR3TotalSize, DR4TotalSize, DR5TotalSize As Long
        Dim DR1Used, DR2Used, DR3Used, DR4Used, DR5Used As Long
        Dim DR1FreeSpace, DR2FreeSpace, DR3FreeSpace, DR4FreeSpace, DR5FreeSpace As Long


        Dim dt As New DataTable("DriveInformation")

        Dim Column_1st As New DataColumn("Date/Time")
        Dim Column_2nd As New DataColumn("Server")
        Dim Column_3rd As New DataColumn("Drive")
        Dim Column_4th As New DataColumn("TotalSpace")
        Dim Column_5th As New DataColumn("UsedSpace")
        Dim Column_6th As New DataColumn("RemainingSpace")
        Dim Column_7th As New DataColumn("Status")

        ' Get information and Write to Console.

        Console.WriteLine("Server Name: {0}", System.Net.Dns.GetHostName)
        Console.WriteLine("Date: {0}", DateTime.Now.ToString("yyyy/MM/dd"))
        Console.WriteLine("")

        Dim DriveNumber As Int16 = 0
        For Each d In allDrives
            DriveNumber = DriveNumber + 1
            Console.WriteLine("Drive {0}", d.Name)
            Console.WriteLine("  Drive type: {0}", d.DriveType)



            If d.IsReady = True And d.TotalSize < 1099511627776 Then
                Console.WriteLine("  Volume label: {0}", d.VolumeLabel)
                Console.WriteLine("  File system: {0}", d.DriveFormat)


                Console.WriteLine(
            "  Total size of drive:   {0, 15} GB ",
            FormatNumber(d.TotalSize / 1024 / 1024 / 1024))


            ElseIf d.IsReady = True And d.TotalSize >= 1099511627776 Then
                Console.WriteLine("  Volume label: {0}", d.VolumeLabel)
                Console.WriteLine("  File system: {0}", d.DriveFormat)



                Console.WriteLine(
            "  Total size of drive:   {0, 15} TB ",
            FormatNumber(d.TotalSize / 1024 / 1024 / 1024 / 1024))
            End If

            If d.IsReady = True And d.TotalSize - d.TotalFreeSpace < 1099511627776 Then



                Console.WriteLine(
                "  Total used space:      {0, 15} GB",
            FormatNumber(d.TotalSize / 1024 / 1024 / 1024 - d.TotalFreeSpace / 1024 / 1024 / 1024))


            ElseIf d.IsReady = True And d.TotalSize - d.TotalFreeSpace >= 1099511627776 Then


                Console.WriteLine(
                "  Total used space:      {0, 15} TB",
                FormatNumber(d.TotalSize / 1024 / 1024 / 1024 / 1024 - d.TotalFreeSpace / 1024 / 1024 / 1024 / 1024))
            End If


            If d.IsReady = True And d.TotalFreeSpace < 1099511627776 Then


                Console.WriteLine(
                "  Total available space: {0, 15} GB",
                FormatNumber(d.TotalFreeSpace / 1024 / 1024 / 1024))
                Console.WriteLine("")

            ElseIf d.IsReady = True And d.TotalFreeSpace >= 1099511627776 Then



                Console.WriteLine(
            "  Total available space: {0, 15} TB",
            FormatNumber(d.TotalFreeSpace / 1024 / 1024 / 1024 / 1024))
                Console.WriteLine("")

            End If


            If DriveNumber = 1 Then
                DR1 = d.Name
                DR1TotalSize = d.TotalSize
                DR1Used = d.TotalSize - d.TotalFreeSpace
                DR1FreeSpace = d.TotalFreeSpace
            End If
            If DriveNumber = 2 Then
                DR2 = d.Name
                DR2TotalSize = d.TotalSize
                DR2Used = d.TotalSize - d.TotalFreeSpace
                DR2FreeSpace = d.TotalFreeSpace
            End If
            If DriveNumber = 3 Then
                DR3 = d.Name
                DR3TotalSize = d.TotalSize
                DR3Used = d.TotalSize - d.TotalFreeSpace
                DR3FreeSpace = d.TotalFreeSpace
            End If
            If DriveNumber = 4 Then
                DR4 = d.Name
                DR4TotalSize = d.TotalSize
                DR4Used = d.TotalSize - d.TotalFreeSpace
                DR4FreeSpace = d.TotalFreeSpace
            End If
            If DriveNumber = 5 Then
                DR5 = d.Name
                DR5TotalSize = d.TotalSize
                DR5Used = d.TotalSize - d.TotalFreeSpace
                DR5FreeSpace = d.TotalFreeSpace
            End If
        Next



        ' Put Information into DataTable
        For Each d In allDrives
            DriveNumber = DriveNumber + 1

            If DriveNumber = 1 Then

                Dim drow1 As DataRow = dt.NewRow

                dt.Columns.Add(Column_1st)
                dt.Columns.Add(Column_2nd)
                dt.Columns.Add(Column_3rd)
                dt.Columns.Add(Column_4th)
                dt.Columns.Add(Column_5th)
                dt.Columns.Add(Column_6th)
                dt.Columns.Add(Column_7th)

                drow1("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
                drow1("Server") = System.Net.Dns.GetHostName
                drow1("Drive") = d.Name
                drow1("TotalSpace") = d.TotalSize
                drow1("UsedSpace") = d.TotalSize - d.TotalFreeSpace
                drow1("RemainingSpace") = d.TotalFreeSpace
                drow1("Status") = d.IsReady
                dt.Rows.Add(drow1)







            End If
            If DriveNumber = 2 Then

                Dim drow2 As DataRow = dt.NewRow

                dt.Columns.Add(Column_1st)
                dt.Columns.Add(Column_2nd)
                dt.Columns.Add(Column_3rd)
                dt.Columns.Add(Column_4th)
                dt.Columns.Add(Column_5th)
                dt.Columns.Add(Column_6th)
                dt.Columns.Add(Column_7th)

                drow2("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
                drow2("Server") = System.Net.Dns.GetHostName
                drow2("Drive") = d.Name
                drow2("TotalSpace") = d.TotalSize
                drow2("UsedSpace") = d.TotalSize - d.TotalFreeSpace
                drow2("RemainingSpace") = d.TotalFreeSpace
                drow2("Status") = d.IsReady
                dt.Rows.Add(drow2)




            End If
            If DriveNumber = 3 Then

                Dim drow3 As DataRow = dt.NewRow


                dt.Columns.Add(Column_1st)
                dt.Columns.Add(Column_2nd)
                dt.Columns.Add(Column_3rd)
                dt.Columns.Add(Column_4th)
                dt.Columns.Add(Column_5th)
                dt.Columns.Add(Column_6th)
                dt.Columns.Add(Column_7th)

                drow3("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
                drow3("Server") = System.Net.Dns.GetHostName
                drow3("Drive") = d.Name
                drow3("TotalSpace") = d.TotalSize
                drow3("UsedSpace") = d.TotalSize - d.TotalFreeSpace
                drow3("RemainingSpace") = d.TotalFreeSpace
                drow3("Status") = d.IsReady
                dt.Rows.Add(drow3)





            End If
            If DriveNumber = 4 Then

                Dim drow4 As DataRow = dt.NewRow

                dt.Columns.Add(Column_1st)
                dt.Columns.Add(Column_2nd)
                dt.Columns.Add(Column_3rd)
                dt.Columns.Add(Column_4th)
                dt.Columns.Add(Column_5th)
                dt.Columns.Add(Column_6th)
                dt.Columns.Add(Column_7th)

                drow4("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
                drow4("Server") = System.Net.Dns.GetHostName
                drow4("Drive") = d.Name
                drow4("TotalSpace") = d.TotalSize
                drow4("UsedSpace") = d.TotalSize - d.TotalFreeSpace
                drow4("RemainingSpace") = d.TotalFreeSpace
                drow4("Status") = d.IsReady
                dt.Rows.Add(drow4)






            End If
            If DriveNumber = 5 Then

                Dim drow5 As DataRow = dt.NewRow

                dt.Columns.Add(Column_1st)
                dt.Columns.Add(Column_2nd)
                dt.Columns.Add(Column_3rd)
                dt.Columns.Add(Column_4th)
                dt.Columns.Add(Column_5th)
                dt.Columns.Add(Column_6th)
                dt.Columns.Add(Column_7th)

                drow5("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
                drow5("Server") = System.Net.Dns.GetHostName
                drow5("Drive") = d.Name
                drow5("TotalSpace") = d.TotalSize
                drow5("UsedSpace") = d.TotalSize - d.TotalFreeSpace
                drow5("RemainingSpace") = d.TotalFreeSpace
                drow5("Status") = d.IsReady
                dt.Rows.Add(drow5)





            End If
        Next

        ' Write Information to DataTable


        dt.WriteXml("c:/temp/ServerDriveInformation_" + DateTime.Now.ToString("yyyy MM dd h mm ss tt ") + ".xml")




        ' Write Information to Database
    End Sub
End Class

However when I run this program, this is the results of the published XML file specified within the code:

XML Write Results

Maybe I am missing something here, or incorreclty listed variables. I just cannot pin point why it is not writing the data table to the XML file. Any help or advice would be greatly appreciated!

1

There are 1 answers

1
dbasnett On BEST ANSWER

The big problem was the adding of columns, only need it once. Made a few changes to get the code to run and it did produce XML.

    Dim dt As New DataTable("DriveInformation")

    Dim Column_1st As New DataColumn("Date/Time")
    Dim Column_2nd As New DataColumn("Server")
    Dim Column_3rd As New DataColumn("Drive")
    Dim Column_4th As New DataColumn("TotalSpace")
    Dim Column_5th As New DataColumn("UsedSpace")
    Dim Column_6th As New DataColumn("RemainingSpace")
    Dim Column_7th As New DataColumn("Status")

    dt.Columns.Add(Column_1st)
    dt.Columns.Add(Column_2nd)
    dt.Columns.Add(Column_3rd)
    dt.Columns.Add(Column_4th)
    dt.Columns.Add(Column_5th)
    dt.Columns.Add(Column_6th)
    dt.Columns.Add(Column_7th)

    ' Get information and Write to Console.

    Console.WriteLine("Server Name: {0}", System.Net.Dns.GetHostName)
    Console.WriteLine("Date: {0}", DateTime.Now.ToString("yyyy/MM/dd"))
    Console.WriteLine("")

    Dim DriveNumber As Integer = 0
    Dim allDrives() As IO.DriveInfo = IO.DriveInfo.GetDrives()
    Dim d As IO.DriveInfo

    For Each d In allDrives
        DriveNumber = DriveNumber + 1
        Console.WriteLine("Drive {0}", d.Name)
        Console.WriteLine("  Drive type: {0}", d.DriveType)
        If d.IsReady = True And d.TotalSize < 1099511627776 Then
            Console.WriteLine("  Volume label: {0}", d.VolumeLabel)
            Console.WriteLine("  File system: {0}", d.DriveFormat)


            Console.WriteLine(
        "  Total size of drive:   {0, 15} GB ",
        FormatNumber(d.TotalSize / 1024 / 1024 / 1024))


        ElseIf d.IsReady = True And d.TotalSize >= 1099511627776 Then
            Console.WriteLine("  Volume label: {0}", d.VolumeLabel)
            Console.WriteLine("  File system: {0}", d.DriveFormat)



            Console.WriteLine(
        "  Total size of drive:   {0, 15} TB ",
        FormatNumber(d.TotalSize / 1024 / 1024 / 1024 / 1024))
        End If

        If d.IsReady = True And d.TotalSize - d.TotalFreeSpace < 1099511627776 Then



            Console.WriteLine(
            "  Total used space:      {0, 15} GB",
        FormatNumber(d.TotalSize / 1024 / 1024 / 1024 - d.TotalFreeSpace / 1024 / 1024 / 1024))


        ElseIf d.IsReady = True And d.TotalSize - d.TotalFreeSpace >= 1099511627776 Then


            Console.WriteLine(
            "  Total used space:      {0, 15} TB",
            FormatNumber(d.TotalSize / 1024 / 1024 / 1024 / 1024 - d.TotalFreeSpace / 1024 / 1024 / 1024 / 1024))
        End If


        If d.IsReady = True And d.TotalFreeSpace < 1099511627776 Then


            Console.WriteLine(
            "  Total available space: {0, 15} GB",
            FormatNumber(d.TotalFreeSpace / 1024 / 1024 / 1024))
            Console.WriteLine("")

        ElseIf d.IsReady = True And d.TotalFreeSpace >= 1099511627776 Then



            Console.WriteLine(
        "  Total available space: {0, 15} TB",
        FormatNumber(d.TotalFreeSpace / 1024 / 1024 / 1024 / 1024))
            Console.WriteLine("")

        End If
        '    If DriveNumber = 1 Then
        '        DR1 = d.Name
        '        DR1TotalSize = d.TotalSize
        '        DR1Used = d.TotalSize - d.TotalFreeSpace
        '        DR1FreeSpace = d.TotalFreeSpace
        '    End If
        '    If DriveNumber = 2 Then
        '        DR2 = d.Name
        '        DR2TotalSize = d.TotalSize
        '        DR2Used = d.TotalSize - d.TotalFreeSpace
        '        DR2FreeSpace = d.TotalFreeSpace
        '    End If
        '    If DriveNumber = 3 Then
        '        DR3 = d.Name
        '        DR3TotalSize = d.TotalSize
        '        DR3Used = d.TotalSize - d.TotalFreeSpace
        '        DR3FreeSpace = d.TotalFreeSpace
        '    End If
        '    If DriveNumber = 4 Then
        '        DR4 = d.Name
        '        DR4TotalSize = d.TotalSize
        '        DR4Used = d.TotalSize - d.TotalFreeSpace
        '        DR4FreeSpace = d.TotalFreeSpace
        '    End If
        '    If DriveNumber = 5 Then
        '        DR5 = d.Name
        '        DR5TotalSize = d.TotalSize
        '        DR5Used = d.TotalSize - d.TotalFreeSpace
        '        DR5FreeSpace = d.TotalFreeSpace
        '    End If
    Next

    ' Put Information into DataTable
    For Each d In allDrives
        DriveNumber = DriveNumber + 1

        If DriveNumber = 1 Then

            Dim drow1 As DataRow = dt.NewRow

            drow1("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
            'drow1("Server") = System.Net.Dns.GetHostName
            drow1("Drive") = d.Name
            drow1("TotalSpace") = d.TotalSize
            drow1("UsedSpace") = d.TotalSize - d.TotalFreeSpace
            drow1("RemainingSpace") = d.TotalFreeSpace
            drow1("Status") = d.IsReady
            dt.Rows.Add(drow1)
        End If
        If DriveNumber = 2 Then

            Dim drow2 As DataRow = dt.NewRow
            drow2("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
            'drow2("Server") = System.Net.Dns.GetHostName
            drow2("Drive") = d.Name
            drow2("TotalSpace") = d.TotalSize
            drow2("UsedSpace") = d.TotalSize - d.TotalFreeSpace
            drow2("RemainingSpace") = d.TotalFreeSpace
            drow2("Status") = d.IsReady
            dt.Rows.Add(drow2)
        End If
        If DriveNumber = 3 Then

            Dim drow3 As DataRow = dt.NewRow

            drow3("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
            'drow3("Server") = System.Net.Dns.GetHostName
            drow3("Drive") = d.Name
            drow3("TotalSpace") = d.TotalSize
            drow3("UsedSpace") = d.TotalSize - d.TotalFreeSpace
            drow3("RemainingSpace") = d.TotalFreeSpace
            drow3("Status") = d.IsReady
            dt.Rows.Add(drow3)
        End If

        If DriveNumber = 4 Then

            Dim drow4 As DataRow = dt.NewRow
            drow4("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
            'drow4("Server") = System.Net.Dns.GetHostName
            drow4("Drive") = d.Name
            drow4("TotalSpace") = d.TotalSize
            drow4("UsedSpace") = d.TotalSize - d.TotalFreeSpace
            drow4("RemainingSpace") = d.TotalFreeSpace
            drow4("Status") = d.IsReady
            dt.Rows.Add(drow4)
        End If
        If DriveNumber = 5 Then
            Dim drow5 As DataRow = dt.NewRow
            drow5("Date/Time") = DateTime.Now.ToString("yyyy/MM/dd")
            'drow5("Server") = System.Net.Dns.GetHostName
            drow5("Drive") = d.Name
            drow5("TotalSpace") = d.TotalSize
            drow5("UsedSpace") = d.TotalSize - d.TotalFreeSpace
            drow5("RemainingSpace") = d.TotalFreeSpace
            drow5("Status") = d.IsReady
            dt.Rows.Add(drow5)
        End If
    Next

    ' Write Information to DataTable

    Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    path = IO.Path.Combine(path, "ServerDriveInformation_.xml")
    dt.WriteXml(path)