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

VB.NET
スポンサーリンク

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

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

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

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

ソース

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

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

[sourcecode language=”vbnet”]
”’ <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
[/sourcecode]

結果表示

[sourcecode language=”vbnet”]
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
[/sourcecode]

特記事項・雑感

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

コメント

タイトルとURLをコピーしました