亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中使用ADOMD.NET查詢多維數據集的實現方法

2020-01-24 02:19:19
字體:
來源:轉載
供稿:網友

本文實例講述了C#中使用ADOMD.NET查詢多維數據集的實現方法,分享給大家供大家參考。具體實現方法分析如下:

ADOMD.NET 是用于與 Microsoft SQL Server Analysis Services 進行通信的 Microsoft .NET Framework 數據訪問接口。 ADOMD.NET 可使用 XML for Analysis 協議與分析數據源通信,方法為使用 TCP/IP 或 HTTP 連接傳輸和接收符合 XML for Analysis 規范的 SOAP 請求和響應。 命令可通過多維表達式 (MDX)、數據挖掘擴展插件 (DMX)、Analysis Services 腳本語言 (ASSL) 或者甚至是有限 SQL 語法來發送,并且可能不返回結果。 可以使用 ADOMD.NET 對象模型來查詢和操作分析數據、關鍵績效指標 (KPI) 和挖掘模型。 使用 ADOMD.NET 時,還可通過檢索與 OLE DB 兼容的架構行集或者使用 ADOMD.NET 對象模型來查看和使用元數據。

ADOMD.NET 數據訪問接口由 Microsoft.AnalysisServices.AdomdClient 命名空間表示

ADOMD.NET安裝包點擊此處下載

實戰,連接并查詢多維數據集:

復制代碼 代碼如下:
string connectionString = "Data Source=localhost;Catalog=MDX Step-by-Step;ConnectTo=11.0;Integrated Security=SSPI";
AdomdConnection _connection = new AdomdConnection(connectionString);
if (_connection != null)
if (_connection.State == ConnectionState.Closed)
    _connection.Open();
AdomdCommand command = _connection.CreateCommand();
StringBuilder sb = new StringBuilder();
sb.Append("WITH");
sb.Append("  MEMBER [Product].[Category].[All Products].[X] AS 1+1");
sb.Append("SELECT{ ([Date].[Calendar].[CY 2002]),([Date].[Calendar].[CY 2003])}*{([Measures].[Reseller Sales Amount]) } ON COLUMNS,");
sb.Append("{ ([Product].[Category].[Accessories]),([Product].[Category].[Bikes]),([Product].[Category].[Clothing]),");
sb.Append("([Product].[Category].[Components]),([Product].[Category].[X])} ON ROWS");
sb.Append("  FROM [Step-by-Step]");
command.CommandText = sb.ToString();

var xmlreader = command.ExecuteXmlReader();
CellSet cellSet = CellSet.LoadXml(xmlreader);

_connection.Close();
var dt = ToDataTable(cellSet);
var v = dt.Rows.Count;

AdomdHelper.cs文件如下:

復制代碼 代碼如下:
using System;
using System.Data;
using Microsoft.AnalysisServices.AdomdClient;
namespace WpfApplication1
{
    /// <summary>
    /// Summary description for AdomdHelper.
    /// </summary>
    public class AdomdHelper
    {
        #region "== Enum ============================================================"
        public enum Versions
        {
            Server,
            Provider,
            Client
        }
        #endregion

        #region "== Methods ============================================================"
        //判斷連接AdomdConnection對象是State是否處于Open狀態。
        public bool IsConnected(ref AdomdConnection connection)
        {
            return (!(connection == null)) && (connection.State != ConnectionState.Broken) && (connection.State != ConnectionState.Closed);
        }

        /// <summary>
        /// 斷開連接
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="destroyConnection">是否銷毀連接</param>
        public void Disconnect(ref AdomdConnection connection, bool destroyConnection)
        {
            try
            {
                if (!(connection == null))
                {
                    if (connection.State != ConnectionState.Closed)
                    {
                        connection.Close();
                    }
                    if (destroyConnection == true)
                    {
                        connection.Dispose();
                        connection = null;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 建立連接
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        public void Connect(ref AdomdConnection connection, string connectionString)
        {
            if (connectionString == "")
                throw new ArgumentNullException("connectionString", "The connection string is not valid.");
            //    Ensure an AdomdConnection object exists and that its ConnectionString property is set.
            if (connection == null)
                connection = new AdomdConnection(connectionString);
            else
            {
                Disconnect(ref connection, false);
                connection.ConnectionString = connectionString;
            }
            try
            {
                connection.Open();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 獲取OLAP數據庫。
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        /// <returns></returns>
        public DataTable GetSchemaDataSet_Catalogs(ref AdomdConnection connection, string connectionString)
        {

            bool connected = true;    //判斷connection在調用此函數時,是否已經處于連接狀態
            DataTable objTable = new DataTable();
            try
            {
                // Check if a valid connection was provided.
                if (IsConnected(ref connection) == false)
                {
                    //如果連接不存在,則建立連接
                    Connect(ref connection, connectionString);
                    connected = false;       //更改connection為未連接狀態。       

                }
                objTable = connection.GetSchemaDataSet(AdomdSchemaGuid.Catalogs, null).Tables[0];
                if (connected == false)
                {
                    //關閉連接
                    Disconnect(ref connection, false);
                }
            }
            catch (Exception err)
            {
                throw err;
            }
            return objTable;
        }

        /// <summary>
        /// 通過SchemaDataSet的方式獲取立方體
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        /// <returns></returns>
        public string[] GetSchemaDataSet_Cubes(ref AdomdConnection connection, string connectionString)
        {
            string[] strCubes = null;
            bool connected = true;   //判斷connection是否已與數據庫連接
            DataTable objTable = new DataTable();
            if (IsConnected(ref connection) == false)
            {
                try
                {
                    Connect(ref connection, connectionString);
                    connected = false;
                }
                catch (Exception err)
                {
                    throw err;
                }
            }
            string[] strRestriction = new string[] { null, null, null };
            objTable = connection.GetSchemaDataSet(AdomdSchemaGuid.Cubes, strRestriction).Tables[0];
            if (connected == false)
            {
                Disconnect(ref connection, false);
            }
            strCubes = new string[objTable.Rows.Count];
            int rowcount = 0;
            foreach (DataRow tempRow in objTable.Rows)
            {
                strCubes[rowcount] = tempRow["CUBE_NAME"].ToString();
                rowcount++;
            }
            return strCubes;
        }

        /// <summary>
        /// 通過SchemaDataSet的方式獲取制定立方體的維度
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        /// <returns></returns>
        public string[] GetSchemaDataSet_Dimensions(ref AdomdConnection connection, string connectionString, string cubeName)
        {
            string[] strDimensions = null;
            bool connected = true;   //判斷connection是否已與數據庫連接
            DataTable objTable = new DataTable();
            if (IsConnected(ref connection) == false)
            {
                try
                {
                    Connect(ref connection, connectionString);
                    connected = false;
                }
                catch (Exception err)
                {
                    throw err;
                }
            }
            string[] strRestriction = new string[] { null, null, cubeName, null, null };
            objTable = connection.GetSchemaDataSet(AdomdSchemaGuid.Dimensions, strRestriction).Tables[0];
            if (connected == false)
            {
                Disconnect(ref connection, false);
            }
            strDimensions = new string[objTable.Rows.Count];
            int rowcount = 0;
            foreach (DataRow tempRow in objTable.Rows)
            {
                strDimensions[rowcount] = tempRow["DIMENSION_NAME"].ToString();
                rowcount++;
            }
            return strDimensions;
        }

        /// <summary>
        /// 以connection的方式獲取立方體
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        /// <returns></returns>
        public string[] GetCubes(ref AdomdConnection connection, string connectionString)
        {
            string[] strCubesName = null;
            bool connected = true;   //判斷connection是否已與數據庫連接
            if (IsConnected(ref connection) == false)
            {
                try
                {
                    Connect(ref connection, connection.ConnectionString);
                    connected = false;
                }
                catch (Exception err)
                {
                    throw err;
                }
            }

            int rowcount = connection.Cubes.Count;
            strCubesName = new string[rowcount];
            for (int i = 0; i < rowcount; i++)
            {
                strCubesName[i] = connection.Cubes[i].Caption;
            }

            if (connected == false)
            {
                Disconnect(ref connection, false);
            }
            return strCubesName;
        }

        /// <summary>
        /// 獲取立方體的維度
        /// </summary>
        /// <param name="connection">AdomdConnection對象的實例</param>
        /// <param name="connectionString">連接字符串</param>
        /// <param name="CubeName">立方體名稱</param>
        /// <returns></returns>
        public string[] GetDimensions(ref AdomdConnection connection, string connectionString, string CubeName)
        {
            string[] strDimensions = null;
            bool connected = true;
            if (IsConnected(ref connection) == false)
            {
                try
                {
                    Connect(ref connection, connection.ConnectionString);
                    connected = false;
                }
                catch (Exception err)
                {
                    throw err;
                }
            }

            int rowcount = connection.Cubes[CubeName].Dimensions.Count;
            strDimensions = new string[rowcount];
            for (int i = 0; i < rowcount; i++)
            {
                strDimensions[i] = connection.Cubes[CubeName].Dimensions[i].Caption.ToString();
            }
            if (connected == false)
            {
                Disconnect(ref connection, false);
            }
            return strDimensions;

        }
        #endregion
    }
}

完整實例代碼點擊此處本站下載。

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人久久一区二区| 欧美日韩国产一区在线| 日韩欧美一区视频| 91po在线观看91精品国产性色| 色老头一区二区三区| 亚洲高清久久网| 国产大片精品免费永久看nba| 91在线国产电影| 亚洲3p在线观看| 欧美日韩在线观看视频小说| 欧美尺度大的性做爰视频| 麻豆一区二区在线观看| 欧美日韩一区二区免费视频| 福利视频一区二区| 久久影视免费观看| 欧美日韩成人网| 欧美久久精品午夜青青大伊人| 色一情一乱一区二区| 中文字幕亚洲综合久久筱田步美| 色七七影院综合| 丰满岳妇乱一区二区三区| 这里只有精品在线观看| 亚洲第一网站免费视频| 国产成人精品电影久久久| 国产精品69久久久久| 欧美日韩在线一区| 色综合天天综合网国产成人网| 97精品国产97久久久久久春色| 精品久久久国产精品999| 久久免费视频网站| 亚洲一区中文字幕在线观看| 美女啪啪无遮挡免费久久网站| 国产欧美一区二区白浆黑人| 亚洲国产精品大全| 国产精品爽爽ⅴa在线观看| 欧美激情在线狂野欧美精品| 国产成人拍精品视频午夜网站| 亚洲女在线观看| 国产人妖伪娘一区91| 亚洲最大成人在线| 久久免费观看视频| 大胆人体色综合| 日韩视频在线一区| 欧美大学生性色视频| 久久久久久久久久国产精品| 成人午夜两性视频| 日韩av大片免费看| 国产精品久久久久久一区二区| 亚洲女性裸体视频| 国产亚洲视频在线观看| 久久999免费视频| 亚洲精品福利在线| 中文字幕欧美日韩| 一区二区三区回区在观看免费视频| 国产91精品久久久久| 国产一区香蕉久久| 国产精品偷伦一区二区| 久久99久久99精品中文字幕| 亚洲另类欧美自拍| 国产97色在线|日韩| 黄色91在线观看| 日韩av网站导航| 欧美成人精品在线视频| 国产这里只有精品| 一区二区av在线| 91精品国产综合久久久久久蜜臀| 国产欧美日韩中文| 日韩av综合网| 国产一区二区三区高清在线观看| 5252色成人免费视频| 欧美精品午夜视频| 欧美性猛xxx| 欧美成人激情视频免费观看| 欧美高清视频免费观看| 91精品久久久久久久久久入口| 日韩免费观看在线观看| 国产精品白嫩初高中害羞小美女| 亚洲欧美资源在线| 亚洲国产美女久久久久| 欧美俄罗斯乱妇| 2019亚洲日韩新视频| 最近中文字幕mv在线一区二区三区四区| 国产欧美在线看| 久久久久久国产精品久久| 中文字幕少妇一区二区三区| 欧美成人精品在线视频| 亚洲性生活视频| 久久久国产一区二区三区| 国产中文字幕亚洲| 欧美成人精品一区二区| 91国产中文字幕| 欧美专区福利在线| 成人淫片在线看| 在线播放国产精品| 亚洲韩国青草视频| 亚洲成年人在线| 欧美一级免费视频| 51色欧美片视频在线观看| 久久久久久久久久久网站| 青青a在线精品免费观看| 精品高清美女精品国产区| 亚洲精品黄网在线观看| 国产午夜精品美女视频明星a级| 国产一区玩具在线观看| 精品激情国产视频| 国产成人a亚洲精品| 久久99青青精品免费观看| 成人精品一区二区三区电影免费| 视频一区视频二区国产精品| 97av在线视频免费播放| 国外色69视频在线观看| 久久久久久久久中文字幕| 欧美成人激情视频免费观看| 日韩中文字幕在线观看| 久久综合伊人77777尤物| 久久久久久久久久久成人| 国产精品视频1区| 国产精品一区二区久久精品| 久久久久久久久国产精品| 日韩暖暖在线视频| 国产精品网红福利| 日韩有码在线电影| 国产精品网红福利| 国产日韩亚洲欧美| 久久久精品国产亚洲| 亚洲a级在线播放观看| 欧美高清无遮挡| 日韩中文字幕网站| 亚洲乱码一区二区| 亚洲护士老师的毛茸茸最新章节| 免费不卡欧美自拍视频| 久久免费视频在线观看| 日韩免费观看在线观看| 亚洲一区二区三区视频| 国产精品视频专区| 欧美成人精品一区| 欧美成人高清视频| 亚洲电影免费观看| 久久av.com| 欧美日韩精品在线视频| 亚洲午夜av电影| 奇米4444一区二区三区| 成人黄色大片在线免费观看| 久久这里只有精品视频首页| 国产精品aaaa| 亚洲综合最新在线| 亚洲尤物视频网| 91禁国产网站| 777午夜精品福利在线观看| 另类图片亚洲另类| 日本a级片电影一区二区| 精品久久久久久久久久久久久久| 国产一区视频在线播放| 亚洲欧美日韩高清| 欧美激情网站在线观看| 欧美韩日一区二区| 久久天天躁狠狠躁夜夜av| 国产成人精品一区二区三区| 色综合色综合网色综合| 精品久久久久久中文字幕一区奶水| 亚洲成人av片| 国产精品69久久久久| 国产精品自拍偷拍| 亚洲在线免费视频|