一种从数据库利用xml创建树型目录的方法(C#)(一)

引言:

无线项目开发中,项目需求要对无线的服务项目追加额外参数,所以需要解析那边的xml数据(如何获得xml数据 我 已经在其它的文章中写过了),然后再按照一定的规律存到本地库(无线那边提供的xml数据需要通过一定的转化过程才能得到 我 们想要的东西)并重新构造一个xml树型目录出来。本文便要提供一种简便的方法实现从数据库生成xml文档,进而用xslt解析成树型目录的方案。

设计方案:

一、 数据库

** Mobile_ServiceType ** ** 服务类型 **


** Field **

|

** DataType **

|

** Default **

|

** Description **

ServiceTypeID

|

int

|

Identity

|

ID

ParentID

|

Int

|

0

|

父类型 ID

MetoneServiceTypeID

|

Int

|

0

|

类型 ID

ServiceTypeName

|

int

|

0

|

服务类型名称

一点说明:这个表存放的是服务类型名称及类型之间的关系的, MetoneServiceTypeID 是当前信息的ID,这里没有使用 ServiceTypeID 作为当前节点的ID是因为当前节点ID是不可以随便改变的,而且这个ID决定了收费标准,所以独立设定此字段的,不过从技术层面来讲设置谁为当前节点并没有什么不同, ParentID 是类型的父类型ID。

二、 存储过程:

/**********************************

功能: 根 据一定条件读取类型记录

作者: Rexsp

创建日期: 2004-03-24

修改者:

修改日期:

**********************************/

ALTER PROCEDURE GetMobileServiceType

(

@Action NVARCHAR(20)='Complex',

@ServiceTypeID INT=-1,

@ServiceTypeName NVARCHAR(50)=null,

@MetoneServiceTypeID INT=-1,

@ParentID INT=-1

)

AS

SET NOCOUNT ON

IF(@Action='Complex')

BEGIN

-- 省略N行与本篇无关的代码

END

IF(@Action='GetTree')

BEGIN

SELECT

MetoneServiceTypeID,

ServiceTypeName,

ParentID,

URL='MobileSetting.aspx?ID='+CAST( MetoneServiceTypeID AS NVARCHAR(4))

FROM [Mobile_ServiceType]

END

一点解释:存储过程有两部分,前半部分是为了一个复杂查询设计的,后面的是构建xml树设置的。这里是通过一个 @Actoin 变量来控制跳入哪个部分的,另外这里的代码 我 简化处理了,真实环境中会 根 据另外一个表的设置来动态生成不同的xml树的。

三、 COM 层代码就列了,总体层次是三层架构,这 我 在专栏中也有提过。这里只给出几个相关的COM层类的接口和功能说明。

MobileServiceTypeCollection 提供各种搜索条件得出的数据集,里面有一个方法,返回一个DataSet,调用的SP就是上面提供的那个:

///

1<summary>
2
3///  获取生成美类型列表相关数据 
4
5/// </summary>

///

1<param name="dataSet"/>

类型列表数据集

///

1<returns> 成功返回  true,  失败返回  false;</returns>

public bool GetMetoneTree(out DataSet dataSet)

{

// 创建 Adapter 对象

SqlDataAdapter dataAdapter = null;

// 创建 data 对象和 params

Database data = new Database("Town");

SqlParameter[] prams ={data.MakeInParam("@Action",SqlDbType.NVarChar,20,"GetTree")};

try

{

data.RunProc("GetMobileServiceType", prams, out dataAdapter);

dataSet = new DataSet();

dataAdapter.Fill(dataSet,"Tree");

dataAdapter.Dispose();

return true;

}

catch (Exception ex)

{

dataSet = null;

Error.Log("Town", ex.ToString());

return false;

}

finally

{

dataAdapter.Dispose();

data.Close();

data.Dispose();

}

}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus