微软BI开拓者多维分析专区MDX 把CellSet转换成DataTable 的C#函数

1  /  1  页   1 跳转 查看:3579

[技术文档] 把CellSet转换成DataTable 的C#函数

把CellSet转换成DataTable 的C#函数

我在网上搜到的资料  做了一些改进  可还是有些地方不能达到需求    希望高手支招

以下方法可返回CellSet对象 /// <summary>
/// 获得多维数据集
/// </summary>
/// <param name="connectionString">olap数据库连接字符串</param>
/// <param name="queryString">MDX查询语句</param>
/// <returns>CellSet</returns>

public static CellSet ExecuteCellSet(string connectionString, string queryString)
        {
            string connString = connectionString;
            AdomdConnection conn = new AdomdConnection();
            conn.ConnectionString = connString;
            conn.Open();
            AdomdCommand command = conn.CreateCommand();
            command.CommandText = queryString;
            CellSet cellSet = command.ExecuteCellSet();
            conn.Close();
            return cellSet;

        }
/// <summary>
        /// 多维数据集返回数据表DataTable
        /// </summary>
        /// <param name="cs">多维数据集</param>
        /// <returns>DataTable 数据列以Count_开头  行头以File_开头</returns>
        public static DataTable ToDataTable(CellSet cs)
        {
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn();
            DataRow dr = null;

            //总列数
            int columnsCount = cs.Axes[0].Positions.Count;
            //总行数
            int rowsCount = cs.Axes[1].Positions.Count;
            //处理行头列
            if (rowsCount > 0)
            {
                Position py = cs.Axes[1].Positions[0];
                for (int i = 0; i < py.Members.Count; i++)
                {
                    dt.Columns.Add("File_" + i.ToString(), System.Type.GetType("System.String"));
                }
            }
            //生成数据列对象
            string name = "";
            foreach (Position p in cs.Axes[0].Positions)
            {
                dc = new DataColumn();
                name = "";
                foreach (Member m in p.Members)
                {
                    name = name + m.Caption + "-";
                }
               
                string[] c = name.TrimEnd('-').Split('-');
                dc.ColumnName = "Count_";
                for (int i = 0; i < c.Length; i++)
                {
                    dc.ColumnName += c+"_";
                }
                dc.ColumnName = dc.ColumnName.TrimEnd('_');
//我不知道怎么获得数据的原始类型  我把它全部定为了字符串型  希望高手指点
                dc.DataType = System.Type.GetType("System.String");
                dt.Columns.Add(dc);
            }
            //添加行数据
            int pos = 0;
            foreach (Position py in cs.Axes[1].Positions)
            {
                dr = dt.NewRow();
                //维度描述列数据(行头)

                for (int i = 0; i < py.Members.Count; i++)
                {
                    dr["File_" + i.ToString()] = py.Members.Caption;

                }
                //数据列
                for (int x = 0; x < cs.Axes[0].Positions.Count; x++)
                {
                    string a = cs[x, pos].FormattedValue.ToString();
                    int c_index = py.Members.Count + x;
                    if (string.IsNullOrEmpty(a))
                    {
                        dr[c_index] = "0";
                    }
                    else
                    {

//这里过滤了那些错误数据
if (a.IndexOf("IN")>0)
                        {
                            dr[c_index] = "0";
                        }
                        else
                        {
                            dr[c_index] = a;
                        }
                       
                    }

                }
                pos = pos + 1;
                dt.Rows.Add(dr);
            }
            //foreach (DataColumn var in dt.Columns)
            //{
            //    try
            //    {
            //        var.DataType. = System.Type.GetType("System.Int");
            //    }
            //    catch (Exception)
            //    {
            //    }
            //    OLAPConfig.temp = OLAPConfig.temp + var.DataType.ToString();
            //}
            return dt;
        }

文章源地址:http://www.live-e.cn/html/AdoMd/20080418/615.html    我的小站 一些我的开发经验总结  刚起步  很希望和大家多交流
最后编辑reasoncool 最后编辑于 2008-04-25 08:17:07
 

回复:把CellSet转换成DataTable 的C#函数

好贴.
 
1  /  1  页   1 跳转

版权所有 微软BI开拓者 

Powered by Discuz!NT 2.1.202    Copyright © 2001-2012 Comsenz Inc.
Processed in 0.0468762 second(s) , 3 queries.
返顶部