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

 

比如说,你的网站上有用户注册的功能,在注册时需要填写一些信息,如邮编,住址等等。一般来说,这些需要填写的项目在数据库中都对应一个字段。当需要增加其它的项目时,不仅程序需要改变,在数据库中必须还要添加相应的字段。所以编写了这样一个类,将所有信息以 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 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值