VB.NETからデータベースに保存されたXMLファイルを読み込む

データベース内にXMLファイルが格納されている接続先に接続することが有り、すこし困ったので、メモです。

データベースにXMLファイルを格納しておく利点って、
登録項目が増えたときにXMLの要素名を増やせば対応できる
ってことですかね?

設計者の怠慢だーと思いながらあれやこれやしてみました。

記載されている内容は、自身の責任において行ってください。この記事により不具合が生じても一切責任は負いません。

ソース

データベースからselect後、XMLファイルを作成

前回公開した、comsqlクラスの関数を変更しています。
.NETの各種データベース接続を簡単にする「DbProviderFactories」

''' <summary>
''' 取得した結果から1行返す。
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function getRowStr() As String()
  Dim strTmp As String = ""
  Dim strResults As String() = Nothing
  Dim i As Integer = 0
  Dim byteXml() As Byte = Nothing
  strErrMsg = ""
  Try
    If (DB_DR.Read) Then
      ReDim strResults(DB_DR.FieldCount - 1)
      'カラム数分ループ
      getFieldType(DB_DR) ' フィールドの型を読み込む
      For i = 0 To DB_DR.FieldCount - 1
        If strFieldType_(i, 1) = "Blob" Then
          ' バイナリ型の場合
          byteXml = DB_DR.GetValue(i)
          strResults(i) = "BLOB"
          ' XMLファイルを書き出す
          Dim fs As New System.IO.FileStream("./temp.xml", IO.FileMode.Create, IO.FileAccess.Write)
          fs.Write(byteXml, 0, byteXml.Length)
          fs.Close()
        ElseIf (DB_DR.IsDBNull(i)) Then
          strResults(i) = ""
        Else
          strResults(i) = DB_DR.GetString(i)
        End If
      Next i
    End If
    If (strResults Is Nothing) Then DB_DR.Close()
    If (strResults Is Nothing) Then DB_CON.Close()
    Return strResults
  Catch ex As Exception
    strErrMsg &= ex.Message.ToString()
    Return Nothing
  End Try
End Function

結果表示

Dim xmlReader As System.Xml.XmlReader = System.Xml.XmlReader.Create("./temp.xml")
While xmlReader.Read
  If xmlReader.NodeType = System.Xml.XmlNodeType.Element Then
    ' 要素名=LocalName 要素の値=ReadString
    Console.WriteLine(xmlReader.LocalName & "=" & xmlReader.ReadString() & vbCrLf)
  End If
End While

特記事項・雑感

XMLをオブジェクト型に変換する、良い方法がないものかなあ、ともう少し試行錯誤してみます。

スポンサーリンク
スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク