<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    一、前言

    1 、運行環(huán)境

    Windows 2003 Server Enterprise Edition with Service Pack 1

    Microsoft SQL Server 2005 with Service Pack 1( 包含 Analysis Service)

    Visual Studio 2005 Team Suite

    2 、本文使用 Microsoft SQL Server 2000 下也可使用的 ADOMD .NET 訪問分析服務(wù)。

    二、目標(biāo)

    查詢分析服務(wù)數(shù)據(jù)轉(zhuǎn)換為 DataTable 形式,在 GridView 中顯示。

    三、實現(xiàn)

    通過 Adomd .NET 訪問分析服務(wù)。通過 MDX 查詢語言查詢數(shù)據(jù)。

    1、? ADO .NET 一樣, ADOMD .NET 也主要有在線數(shù)據(jù)讀取器 AdomdDataReader 和離線數(shù)據(jù)集 ( 類似 DataSet ) CellSet

    2、? 訪問數(shù)據(jù)的步驟為:建立連接 -> 打開連接 -> 建立 AdomdCommand -> 得到 CellSet -> 關(guān)閉連接 -> CellSet 轉(zhuǎn)化為 DataTable 或?qū)?shù)據(jù)綁定到對應(yīng)的餅圖等統(tǒng)計圖控件

    3、? 代碼片斷

    l???????? 打開連接,連接到分析服務(wù)

    ??????? public void OpenConnection()

    ??????? {

    ??????????? if (_connection != null)

    ??????????????? if (_connection.State == ConnectionState.Closed)

    ??????????????????? _connection.Open();

    ??????? }

    l????????? 獲得 CellSet 數(shù)據(jù)對象

    ??????? public CellSet ExecuteCellSet(string queryString)

    ??????? {

    ??????????? OpenConnection();

    ?

    ??????????? AdomdCommand command = _connection.CreateCommand();

    ?

    ??????????? command.CommandText = queryString;

    ???????????

    ??????????? CellSet cellSet = command.ExecuteCellSet();

    ???????????

    ??????????? CloseConnection();

    ?

    ??????????? return cellSet;

    ??????? }

    l????????? CellSet 數(shù)據(jù)對象轉(zhuǎn)換為 DataTable 對象

    ??????? public DataTable ToDataTable(CellSet cs)

    ??????? {

    ??????????? DataTable dt = newDataTable();

    ??????????? DataColumn dc = newDataColumn();

    ??????????? DataRow dr = null;

    ?

    ??????????? // 第一列:必有為維度描述(行頭)

    ??????????? dt.Columns.Add(newDataColumn("Description"));

    ?

    ??????????? // 生成數(shù)據(jù)列對象

    ??????????? string name;

    ?

    ??????????? foreach (Position p in cs.Axes[0].Positions)

    ??????????? {

    ??????????????? dc = newDataColumn();

    ??????????????? name = "";

    ??????????????? foreach (Member m in p.Members)

    ??????????????? {

    ??????????????????? name = name + m.Caption + " ";

    ??????????????? }

    ?

    ??????????????? dc.ColumnName = name;

    ??????????????? dt.Columns.Add(dc);

    ??????????? }

    ?

    ??????????? // 添加行數(shù)據(jù)

    ??????????? int pos = 0;

    ?

    ??????????? foreach (Position py in cs.Axes[1].Positions)

    ??????????? {

    ??????????????? dr = dt.NewRow();

    ?

    ??????????????? // 維度描述列數(shù)據(jù)(行頭)

    ??????????????? name = "";

    ??????????????? foreach (Member m in py.Members)

    ?????????? ?????{

    ??????????????????? name = name + m.Caption + "\r\n";

    ??????????????? }

    ??????????????? dr[0] = name;

    ?

    ??????????????? // 數(shù)據(jù)列

    ??????????????? for (int x = 1; x <= cs.Axes[0].Positions.Count; x++)

    ??????????????? {

    ??????????????????? dr[x] = cs[pos++].FormattedValue;

    ??????????????? }

    ?

    ??????????????? dt.Rows.Add(dr);

    ??????????? }

    ?

    ??????????? return dt;

    ??????? }

    5 、程序調(diào)用

    ??? BaseComponent.Data.SqlAnalysisService sa

    ??????? = newSqlAnalysisService("Data Source=localhost;Catalog=LibraryStat");

    ?

    ??? protected void Page_Load(object sender, EventArgs e)

    ??? {

    ??????? StringBuilder sb=newStringBuilder();

    ?

    ??????? sb.Append("with ");

    ??????? sb.Append(" set [AllCount] as '[ 圖書分銷 訂單].[層次結(jié)構(gòu)].[單位].[安徽大學(xué)???? 圖書館].Children'" );

    ??????? sb.Append(" Member [ 圖書分銷 訂單].[層次結(jié)構(gòu)].[單位].[安徽大學(xué)???? 圖書館].[合計] as 'aggregate([AllCount])'" );

    ??????? sb.Append(" Member [ 所占訂單數(shù)百分比] as '[訂單數(shù)量]/([訂單數(shù)量],[圖書分銷 訂單].[層次結(jié)構(gòu)].[單位].[安徽大學(xué)???? 圖書館].[合計])',format_string='#.00%'" );

    ??????? sb.Append(" select {[Measures].[ 訂單數(shù)量],[Measures].[儲運數(shù)量],[Measures].[原始數(shù)量],[所占訂單數(shù)百分比]} on columns," );

    ??????? sb.Append(" {[ 圖書分銷 訂單].[層次結(jié)構(gòu)].[單位].[安徽大學(xué)???? 圖書館].Children} on rows" );

    ??????? sb.Append(" from [ 圖書館統(tǒng)計]" );

    ?

    ??????? DataTable dt = sa.GetDataTable(sb.ToString());

    ?

    ??????? gv.DataSource = dt;

    ??????? gv.DataBind();

    ??? }

    gv 為一個 GridView 對象。除了查詢語句不同,數(shù)據(jù)綁定是一樣的,因為已經(jīng)轉(zhuǎn)換為 DataTable 了。

    四、備注

    命名空間: Microsoft.AnalysisServices.AdomdClient

    程序集文件: Microsoft.AnalysisServices.AdomdClient.dll Microsoft SQL Server 2005 9.0 版; Microsoft SQL Server 2000 8.0 版)

    AdomdClient 當(dāng)然有 AdomdServer ,分析服務(wù)也包含了存儲過程和 CLR 的存儲過程。

    五、后記

    l???????? 理論上本例也可以在 Microsoft SQL Server 2000 下運行。但是我的同事在 WebForm 下應(yīng)用時出現(xiàn)錯誤。

    l???????? 在微軟推出 Microsoft SQL Server 2005 之后,微軟又為分析服務(wù)提供了多種訪問方式。



    凡是有該標(biāo)志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉(zhuǎn)載請注明來處和原文作者。非常感謝。

    posted on 2006-06-10 13:19 草兒 閱讀(593) 評論(0)  編輯  收藏 所屬分類: DotNet
    主站蜘蛛池模板: 成人免费在线视频| 91在线免费视频| 色偷偷尼玛图亚洲综合| 99亚偷拍自图区亚洲| 中文字幕乱码亚洲无线三区| 久久久久se色偷偷亚洲精品av| 亚洲黄网站wwwwww| 亚洲国产品综合人成综合网站| 亚洲欧洲国产经精品香蕉网| 亚洲国产精品日韩在线观看| 亚洲成人网在线播放| 亚洲av乱码一区二区三区| 亚洲综合久久一本伊伊区| 亚洲综合色丁香婷婷六月图片| 亚洲中文无码av永久| 色天使亚洲综合在线观看| 亚洲精品GV天堂无码男同| 亚洲av中文无码乱人伦在线观看| 色婷婷六月亚洲综合香蕉| 免费国产污网站在线观看不要卡| 丁香六月婷婷精品免费观看| 99视频在线免费观看| 久久久久成人片免费观看蜜芽 | 国产亚洲AV无码AV男人的天堂| 国产∨亚洲V天堂无码久久久| 亚洲∧v久久久无码精品| 亚洲女人18毛片水真多| 亚洲熟妇无码八V在线播放| 特级一级毛片免费看| 最近免费中文字幕中文高清| 18观看免费永久视频| 我要看WWW免费看插插视频| 亚洲AV无码乱码精品国产| 亚洲成AV人片一区二区密柚| 亚洲小说图片视频| 美女羞羞免费视频网站| 13小箩利洗澡无码视频网站免费| 麻豆视频免费观看| 又粗又大又猛又爽免费视频| 亚洲AV永久精品爱情岛论坛| 91嫩草亚洲精品|