Web连接cube,并将CellSet转成DataTable

Web连接cube,并将CellSet转成DataTable

 

1.        正常情况下我们使用ssrs连接cube,但是由于ssrs的局限性以及其它需求的存在,我们希望直接通过web应用程序来连接cube,就像直接连接sqlserver、oracle等数据库一样。

 

2.        如果要通过web程序连接ms的cube的话,我们需要通过一个额外的组件即ADOMD.NET来进行连接,该组件可在C:\Program Files(x86)\Microsoft.NET\ADOMD.NET\10中找到,文件名为Microsoft.AnalysisServices.AdomdClient.dll,引用后可通过using Microsoft.AnalysisServices.AdomdClient命名控件来调用其下的对象和功能。

 

3.        Microsoft.AnalysisServices.AdomdClient下主要包含以下对象

l  AdomdConnection

l  AdomdCommand

l  AdomdDataAdapter

l  AdomdDataReader

l  CellSet等

 

4.        以上对象的使用参考System.Data.SqlClient名称空间下的SqlConnection等,一般只使用AdomdCommand的ExecuteCellSet()方法,获取CellSet,然后再转成DataTable

 

5.        转成DataTable的方法如下

        /// <summary>
        /// CellSet转成DataTable(只能转换一维二维数据)
        /// </summary>
        /// <param name="cs"></param>
        /// <returns></returns>
        public DataTable ToDataTable(CellSet cs)
        {
            DataTable dt = new DataTable("ResultTable");
            DataColumn dc = null;
            DataRow dr = null;

            //列名或行名
            string name;
            //添加行数据
            int pos = 0;

            if (cs.Axes.Count > 0)
            {
                //当为二维数据时,第一列:必有为维度描述(行头)
                if (cs.Axes.Count == 2) dt.Columns.Add(new DataColumn("Description"));

                //生成数据列对象
                foreach (Position px in cs.Axes[0].Positions)
                {
                    dc = new DataColumn();
                    name = "";

                    foreach (Member m in px.Members) name = name + m.Caption + " ";
                    dc.ColumnName = name;

                    dt.Columns.Add(dc);
                }
            }

            if (cs.Axes.Count == 1)
            {
                //一维数据转换为DataTable
                int rowCount = cs.Cells.Count / dt.Columns.Count;
                for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
                {
                    dr = dt.NewRow();

                    for (int columnIndex = 0; columnIndex < dt.Columns.Count; columnIndex++)
                    {
                        dr[columnIndex] = cs[pos++].FormattedValue;
                    }

                    dt.Rows.Add(dr);
                }
            }
            else if (cs.Axes.Count == 2)
            {
                //二维数据转换为DataTable
                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;
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值