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
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
相关文章推荐
- 数据库用一个int类型的字段保存前端多个字段(该字段为多选)
- Log4net 自定义信息(字段)存入数据库
- SSH框架数据库连接信息和保存进数据库的某些特殊字段加密(jasypt)
- 用VC在 数据库表里增加一个字段读出,然后显示、保存
- Log4net保存自定义信息到数据库
- 让log4net保存自定义对象信息到数据库中
- 关于 xpo 修改字段值,提交成功后,却没有保存到数据库中的一个原因。
- oracle数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
- Log4net 自定义信息(字段)存入数据库
- 数据库查询语句,oracle查询一个表中字段相同信息的个数并按个数排序
- 关于CheckBoxList点击多选的时候值可以保存到数据库中的一个字段中,同时在编辑读取的时候可以把数据库的值赋给CheckBoxList
- Log4Net 添加自定义字段并保存到数据库
- Log4net自定义信息(变量或属性或字段)存入数据库
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 在SqlServer2005环境下查看当前数据库及表、字段等定义信息的sql
- PowerDesigner15生成数据库 同时自动生成字段说明(备注)信息
- 利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)
- 通过包名打开另外一个应用程序和获取手机中已安装apk文件信息(PackageInfo、ResolveIn ...
- sqlserver查询一个表的字段信息