一種從數(shù)據(jù)庫使用xml創(chuàng)建樹型目錄的方法(C#)(一
發(fā)表時間:2024-02-26 來源:明輝站整理相關軟件相關文章人氣:
[摘要]引言:無線項目開發(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();
}
}