datasetの内容をxmlファイルに出力する

datasetの内容をxmlに出力するのにはたった一行、writexmlという関数を使うだけでできあがる模様。あいたたた。datagridにバインドされたデータを一生懸命xml化するためにコードを考えていたのが馬鹿らしくなった。datasetの内容をxmlに変換できるというのは知らないとわからないけれど、xmlデータをdatagridにバインドできるのを知ってたのに逆を想像できなかったのが鈍すぎる。

datasetをxmlファイルに出力するサンプルコード(スマートな方法)

    'datasetを作成するための素材
    Dim cn As New OleDb.OleDbConnection("データベース接続文字列")
    Dim da As OleDb.OleDbDataAdapter
    Dim ds As DataSet

    'datasetにsqlの結果のテーブルをセット
    ds = New DataSet("家計簿")
    da = New OleDb.OleDbDataAdapter("SELECT * FROM 収支", cn)
    da.Fill(ds, "家計簿")

    'datasetにセットされたテーブルをxmlファイル出力
    ds.WriteXml("./data/account.xml")

    'datasetの解放
    da.Dispose()
    ds.Dispose()

datasetをxmlファイルに出力するサンプルコード(悪い見本)

    'datasetを作成するための素材
    Dim cn As New OleDb.OleDbConnection("データベース接続文字列")
    Dim da As OleDb.OleDbDataAdapter
    Dim ds As DataSet

    ds = New DataSet("家計簿")
    da = New OleDb.OleDbDataAdapter(SELECT * FROM 収支, cn)
    da.Fill(ds, "家計簿")

    'xmlドキュメントの宣言
    Dim xmlDoc As New System.Xml.XmlDocument

    'XML宣言
    Dim xmlDecl As System.Xml.XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)

    '宣言を子要素として追加
    xmlDoc.AppendChild(xmlDecl)

    'ルート要素の作成
    Dim rootEle As System.Xml.XmlElement = xmlDoc.CreateElement("家計簿データ")

    'データグリッドのレコード件数をセット
    Dim records As Integer
    Dim i As Integer
    records = ds.Tables(0).Rows.Count
    i = ds.Tables(0).Rows.Count

    '家計簿のレコードの各要素の宣言
    Dim recordElements(i) As XmlElement
    Dim idEle(i) As XmlElement
    Dim dateEle(i) As XmlElement
    Dim catEle(i) As XmlElement
    Dim detEle(i) As XmlElement
    Dim accEle(i) As XmlElement
    Dim moneyEle(i) As XmlElement
    Dim comEle(i) As XmlElement

    'datasetのテーブルからレコードの各値を取り出してノードを作成。レコード件数分ループ。
    For i = 0 To (records - 1)

        recordElements(i) = xmlDoc.CreateElement("レコード")

        dateEle(i) = xmlDoc.CreateElement("入力日")
        dateEle(i).InnerText = ds.Tables(0).Rows(i).Item(0).ToString

        catEle(i) = xmlDoc.CreateElement("費目")
        catEle(i).InnerText = ds.Tables(0).Rows(i).Item(1).ToString

        detEle(i) = xmlDoc.CreateElement("内訳")
        detEle(i).InnerText = ds.Tables(0).Rows(i).Item(2).ToString

        accEle(i) = xmlDoc.CreateElement("口座名称")
        accEle(i).InnerText = ds.Tables(0).Rows(i).Item(3).ToString

        moneyEle(i) = xmlDoc.CreateElement("収支")
        moneyEle(i).InnerText = ds.Tables(0).Rows(i).Item(4).ToString

        comEle(i) = xmlDoc.CreateElement("備考")
        comEle(i).InnerText = ds.Tables(0).Rows(i).Item(5).ToString

        idEle(i) = xmlDoc.CreateElement("id")
        idEle(i).InnerText = ds.Tables(0).Rows(i).Item(6).ToString

        recordElements(i).AppendChild(dateEle(i))
        recordElements(i).AppendChild(catEle(i))
        recordElements(i).AppendChild(detEle(i))
        recordElements(i).AppendChild(accEle(i))
        recordElements(i).AppendChild(moneyEle(i))
        recordElements(i).AppendChild(comEle(i))
        recordElements(i).AppendChild(idEle(i))

        rootEle.AppendChild(recordElements(i))

    Next i

    '作成したルート要素をxmlDocの子要素として追加
    xmlDoc.AppendChild(rootEle)

    '作成したDOMドキュメントをファイルに保存
    xmlDoc.Save("./data/account.xml")

    'datasetの解放
    da.Dispose()
    ds.Dispose()

・・・こんなしんどいことをやろうとしてました(;´д` )

コメントを残す

メールアドレスが公開されることはありません。