• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C#應用訪問Microsoft SQL Server 2005分析服務

    發表于:2007-04-22來源:作者:點擊數: 標簽:sqlServenbsp應用microsoft
    一、前言 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訪
     

    一、前言
    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.dll(Microsoft SQL Server 2005為9.0版;Microsoft SQL Server 2000為8.0版)

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

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

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

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>