假设有如下一棵树:
要存储于数据库中,最简单直接的方法,就是存储每个元素的父节点ID。
暂且把这种方法命名依赖父节点法,因此表结构设计如下:
存储的数据如下格式:
这种结构下,如果查询某一个节点的直接子节点,十分容易,比如要查询D节点的子节点。
想用一个数据存储整个树,请将树转换为xml并存储,节点数据需要体现在xml内;想要一条记录保存一个节点,请保存节点的FullPath属性值,该值在一棵树内是唯一的。节点数据可以在其他列存储。
反过来,从数据库生成数。
xml转换成树很简单;
一堆节点拼接成一棵树需要分析其路径,可以将记录按FullPath字符串升序排序后依次生成节点并连结。
将DataSet数据集写入数据库:string strConnect = Provider=SQLOLEDB.1Password=1234Persist Security Info=True+User ID=usernameInitial Catalog=MyTempDbData Source=localhostOleDbConnection dbConn = new OleDbConnectiondbConn.ConnectionString = strConnecttry{StringBuilder strXml = new StringBuilder()StringWriter strWriter = new StringWriter( strXml )XmlTextWriter writer = new XmlTextWriter(strWriter)writer.WriteStartDocument()m_dsDataSet.WriteXml(writer)string strSQL = INSERT INTO temp(Temp_date,Temp_data) VALUES(GETDATE(),?)OleDbCommand aCommand = new OleDbCommand( strSQL , dbConn )aCommand.Parameters.Add(Temp_data, OleDbType.VarChar).Value = strXml.ToString()aCommand.Connection.Open()aCommand.ExecuteNonQuery()}catch ( OleDbException e ){Debug.WriteLine(发生异常: + e.ToString())}从数据库中读出DataSet数据集:// 这里省略千篇一律的数据库的Query *** 作OleDbDataReader aReader = aCommand.ExecuteReader( )if (aReader.Read() ){StringBuilder strXml = new StringBuilder( aReader[temp_data].ToString() )StringReader strReader = new StringReader( strXml.ToString() )XmlTextReader reader = new XmlTextReader(strReader)try{m_dsDataSet.ReadXml(reader)aReader.Close( )}catch( OleDbException e ){Debug.WriteLine(发生异常: + e.ToString())}}注意以上例子所引用的变量m_dsDataSet的原始定义为DataSet m_dsDataSet,在这里是一个作者自定义包含有两个表和记录的DataSet实例,其中的记录来源于搜索引擎分析出的每条记录。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)