明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

一種從數(shù)據(jù)庫使用xml創(chuàng)建樹型目錄的方法(C#)(一

[摘要]引言:無線項目開發(fā)中,項目需求要對無線的服務項目追加額外參數(shù),所以需要解析那邊的xml數(shù)據(jù)(如何獲得xml數(shù)據(jù)我已經(jīng)在其它的文章中寫過了),然后再按照一定的規(guī)律存到本地庫(無線那邊提供的xml數(shù)據(jù)需要通過一定的轉(zhuǎn)化過程才能得到我們想要的東西)并重新構造一個xml樹型目錄出來。本文便要提供一種簡便的...
引言:

無線項目開發(fā)中,項目需求要對無線的服務項目追加額外參數(shù),所以需要解析那邊的xml數(shù)據(jù)(如何獲得xml數(shù)據(jù)我已經(jīng)在其它的文章中寫過了),然后再按照一定的規(guī)律存到本地庫(無線那邊提供的xml數(shù)據(jù)需要通過一定的轉(zhuǎn)化過程才能得到我們想要的東西)并重新構造一個xml樹型目錄出來。本文便要提供一種簡便的方法實現(xiàn)從數(shù)據(jù)庫生成xml文檔,進而用xslt解析成樹型目錄的方案。



設計方案:

一、數(shù)據(jù)庫

 

Mobile_ServiceType 服務類型

Field
DataType
Default
Description

ServiceTypeID
int
Identity
ID

ParentID
Int
0
父類型ID

MetoneServiceTypeID
Int
0
類型ID

ServiceTypeName
int
0
服務類型名稱




一點說明:這個表存放的是服務類型名稱及類型之間的關系的,MetoneServiceTypeID是當前信息的ID,這里沒有使用ServiceTypeID 作為當前節(jié)點的ID是因為當前節(jié)點ID是不可以隨便改變的,而且這個ID決定了收費標準,所以獨立設定此字段的,不過從技術層面來講設置誰為當前節(jié)點并沒有什么不同,ParentID是類型的父類型ID。

二、存儲過程:

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

功能:根據(jù)一定條件讀取類型記錄

作者:Rexsp

創(chuàng)建日期: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變量來控制跳入哪個部分的,另外這里的代碼我簡化處理了,真實環(huán)境中會根據(jù)另外一個表的設置來動態(tài)生成不同的xml樹的。

三、COM層代碼就列了,總體層次是三層架構,這我在專欄中也有提過。這里只給出幾個相關的COM層類的接口和功能說明。

MobileServiceTypeCollection提供各種搜索條件得出的數(shù)據(jù)集,里面有一個方法,返回一個DataSet,調(diào)用的SP就是上面提供的那個:

/// <summary>

/// 獲取生成美類型列表相關數(shù)據(jù)

/// </summary>

/// <param name="dataSet">類型列表數(shù)據(jù)集</param>

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

public bool GetMetoneTree(out DataSet dataSet)

{

//創(chuàng)建Adapter對象

SqlDataAdapter dataAdapter = null;

//創(chuàng)建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();

}

}