C#應用訪問Microsoft SQL Server 2005分析服務

原文出處:http://www.cnblogs.com/yiriqing/archive/2007/01/25/630174.html

接上次建立的多維數據集

一、前言

1、運行環境

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訪問分析服務。

二、目標

查詢分析服務數據轉換爲DataTable形式,在GridView中顯示。

三、實現

通過Adomd .NET訪問分析服務。通過MDX查詢語言查詢數據。

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

2、 訪問數據的步驟爲:建立連接->打開連接->建立AdomdCommand ->得到CellSet->關閉連接->CellSet轉化爲DataTable或將數據綁定到對應的餅圖等統計圖控件

3、 代碼片斷

l         打開連接,連接到分析服務

        public void OpenConnection()

        {

            if (_connection != null)

                if (_connection.State == ConnectionState.Closed)

                    _connection.Open();

        }

l          獲得CellSet數據對象

        public CellSet ExecuteCellSet(string queryString)

        {

            OpenConnection();

 

            AdomdCommand command = _connection.CreateCommand();

 

            command.CommandText = queryString;

           

            CellSet cellSet = command.ExecuteCellSet();

           

            CloseConnection();

 

            return cellSet;

        }

l          CellSet數據對象轉換爲DataTable對象

        public DataTable ToDataTable(CellSet cs)

        {

            DataTable dt = new DataTable();

            DataColumn dc = new DataColumn();

            DataRow dr = null;

 

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

            dt.Columns.Add(new DataColumn("Description"));

 

            //生成數據列對象

            string name;

 

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

            {

                dc = new DataColumn();

                name = "";

                foreach (Member m in p.Members)

                {

                    name = name + m.Caption + " ";

                }

 

                dc.ColumnName = name;

                dt.Columns.Add(dc);

            }

 

            //添加行數據

            int pos = 0;

 

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

            {

                dr = dt.NewRow();

 

                //維度描述列數據(行頭)

                name = "";

                foreach (Member m in py.Members)

                {

                    name = name + m.Caption + "/r/n";

                }

                dr[0] = name;

 

                //數據列

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

                {

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

                }

 

                dt.Rows.Add(dr);

            }

 

            return dt;

        }

5、程序調用

    BaseComponent.Data.SqlAnalysisService sa

        = new SqlAnalysisService("Data Source=localhost;Catalog=LibraryStat");

 

    protected void Page_Load(object sender, EventArgs e)

    {

        StringBuilder sb=new StringBuilder();

 

        sb.Append("with ");

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

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

        sb.Append(" Member [所佔訂單數百分比] as '[訂單數量]/([訂單數量],[圖書分銷 訂單].[層次結構].[單位].[安徽大學     圖書館].[合計])',format_string='#.00%'");

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

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

        sb.Append(" from [圖書館統計]");

 

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

 

        gv.DataSource = dt;

        gv.DataBind();

    }

gv爲一個GridView對象。除了查詢語句不同,數據綁定是一樣的,因爲已經轉換爲DataTable了。

四、備註

命名空間:Microsoft.AnalysisServices.AdomdClient

程序集文件:Microsoft.AnalysisServices.AdomdClient.dllMicrosoft SQL Server 20059.0版;Microsoft SQL Server 20008.0版)

AdomdClient當然有AdomdServer,分析服務也包含了存儲過程和CLR的存儲過程。

五、後記

l         理論上本例也可以在Microsoft SQL Server 2000下運行。但是我的同事在WebForm下應用時出現錯誤。

l         在微軟推出Microsoft SQL Server 2005之後,微軟又爲分析服務提供了多種訪問方式。

 下次有時間講講如何定時從SQL 2005更新數據到分析服務。

 
發佈了46 篇原創文章 · 獲贊 5 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章