您的位置:首页 > 数据库

ExpandInfo 类,可向数据库中一个字段保存多个自定义信息

2007-01-21 22:08 477 查看
比如说,你的网站上有用户注册的功能,在注册时需要填写一些信息,如邮编,住址等等。一般来说,这些需要填写的项目在数据库中都对应一个字段。当需要增加其它的项目时,不仅程序需要改变,在数据库中必须还要添加相应的字段。所以编写了这样一个类,将所有信息以 XML 格式保存在一个字段中,这样当需求改变时,只要改写少量的程序,而不需要再在数据库中做任何的改动。比较适合保存一些不经常使用的数据库。而且在 MS SQL Server 2005 中还支持 XML 字段,即使用来查询效率也没问题。

Imports System.Xml

''' <summary>
''' 扩展信息类
''' </summary>
''' <remarks>自定义的扩展信息,以 XML 字符串为输入输出</remarks>
Public Class ExpandInfo

''' <summary>
''' 扩展信息项目集合
''' </summary>
''' <remarks></remarks>
Private ItemList As New Dictionary(Of String, ExpandInfoItem)

''' <summary>
''' 从 XML 字符串创建对象
''' </summary>
''' <param name="expandString">XML 格式的字符串</param>
''' <remarks></remarks>
Public Sub New(ByVal expandString As String)
If Not String.IsNullOrEmpty(expandString) Then
Dim xmldoc As New XmlDocument
Try
xmldoc.LoadXml(expandString)
Dim expandNode As XmlNode = xmldoc.SelectSingleNode("ExpandInfos")
For Each n As XmlNode In expandNode.ChildNodes
Dim item As New ExpandInfoItem(n.Name)
For Each attrib As XmlAttribute In n.Attributes
item.Attribs.Add(attrib.Name, attrib.Value)
Next
ItemList.Add(item.ItemName, item)
Next
Catch ex As Exception

End Try
End If
End Sub

''' <summary>
''' 向扩展信息项目集合中添加一个对象
''' </summary>
''' <param name="item">扩展信息项目对象</param>
''' <remarks></remarks>
Public Sub AddItem(ByVal item As ExpandInfoItem)
If item Is Nothing Then Exit Sub
If Me.ItemList.Item(item.ItemName) Is item Then Exit Sub

Me.ItemList.Item(item.ItemName) = item
End Sub

''' <summary>
''' 返回指定名称的扩展信息项目对象
''' </summary>
''' <param name="keyName">扩展信息项目名称</param>
''' <param name="create">当对象不存在时是否创建</param>
''' <returns></returns>
''' <remarks>当对象不存在时,如 create 为 True ,则创建对象并返回,否则返回 Nothing</remarks>
Public Function GetItem(ByVal keyName As String, ByVal create As Boolean) As ExpandInfoItem
Dim item As ExpandInfoItem = Nothing

If ItemList.ContainsKey(keyName) Then
item = ItemList.Item(keyName)
ElseIf create Then
item = New ExpandInfoItem(keyName)
Me.ItemList.Add(keyName, item)
End If

Return item
End Function

''' <summary>
''' 输入 XML 格式的字符串
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function ToString() As String
Dim S As New System.IO.MemoryStream

Dim X As New System.Xml.XmlTextWriter(S, System.Text.Encoding.GetEncoding("GB2312"))
X.Formatting = Formatting.Indented

X.WriteStartDocument()

X.WriteStartElement("ExpandInfos")
For Each item As ExpandInfoItem In ItemList.Values
X.WriteStartElement(item.ItemName)
For Each attribItem As KeyValuePair(Of String, String) In item.Attribs
X.WriteStartAttribute(attribItem.Key)
X.WriteValue(attribItem.Value)
X.WriteEndAttribute()
Next
X.WriteEndElement()
Next
X.WriteEndElement()

X.WriteEndDocument()
X.Flush()
Dim strR As String = System.Text.Encoding.GetEncoding("GB2312").GetString(S.ToArray)
X.Close()
S.Close()
Return strR

End Function
End Class

''' <summary>
''' 扩展信息项目类
''' </summary>
''' <remarks>此类以一个名称为标识,可以创建多个键/值信息,用于保存自定义的扩展信息</remarks>
Public Class ExpandInfoItem

Private _itemName As String

''' <summary>
''' 返回或设置标识名称
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks>此为标识名称。在添加到 ExpandInfo 对象中后的唯一标识名称。在导出的 XML 中此标识作为 Element 名称。</remarks>
Public Property ItemName() As String
Get
Return Me._itemName
End Get
Set(ByVal value As String)
Me._itemName = value
End Set
End Property

''' <summary>
''' 属性集合
''' </summary>
''' <remarks></remarks>
Public Attribs As New Collections.Generic.Dictionary(Of String, String)

''' <summary>
''' 以指定名称为标识名称创建对象
''' </summary>
''' <param name="itemName">标识名称</param>
''' <remarks></remarks>
Public Sub New(ByVal itemName As String)
Me._itemName = itemName
End Sub

''' <summary>
''' 返回指定属性名称的属性的值
''' </summary>
''' <param name="attribName">需要返回值的属性的名称</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetAttribValue(ByVal attribName As String) As String
If Attribs.ContainsKey(attribName) Then
Return Attribs.Item(attribName)
Else
Return String.Empty
End If
End Function
End Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐