データベース内に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をオブジェクト型に変換する、良い方法がないものかなあ、ともう少し試行錯誤してみます。
コメント