C#应用访问Microsoft SQL Server 2005分析服务

原创 2006年05月17日 09:14:00

一、前言

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 Server 2005安装程序,IIS功能要求警告的解决方法

在安装MS Sqlserver 2005到系统配置检查时,IIS功能要求显示叹号警告。     详细描述如下:未安装 Microsoft Internet 信息服务(IIS)或已...
  • a137268431
  • a137268431
  • 2014年04月18日 10:56
  • 5110

SQL Server 2005无法连接到服务器的解决方法

SQL Server 2005无法连接到服务器的解决方法 ------------------------------ 无法连接到 XXXX(服务器名)。 ------------------...
  • CsethCRM
  • CsethCRM
  • 2014年01月23日 10:28
  • 2342

C#程序连接Sql Server 2008 R2数据库

我有一个C#的程序需要连接
  • liuguobo
  • liuguobo
  • 2014年05月08日 14:55
  • 10094

T-SQL 编程与应用----学习笔记一[Microsoft SQL Server 2005]

1.有效标识符 @开头的标识符表示这是一个局部变量或是一个函数的参数@@全局变量#开头的标识符表示这是一个临时表或是一个存储过程##开头的标识符表示这是一个全局的临时数据库对象2.注释(1)多行注释/...
  • Omarix
  • Omarix
  • 2011年07月14日 14:53
  • 419

C# +Microsoft sql server2005在线考试系统

  • 2010年07月02日 22:26
  • 748KB
  • 下载

SQL SERVER数据库开发之存储过程应用---[Microsoft Sql Server 2005]

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我...
  • Omarix
  • Omarix
  • 2011年07月11日 13:10
  • 376

SQL Server 2005分析服务从入门到精通.rar

  • 2008年10月30日 09:22
  • 8.28MB
  • 下载

Microsoft SQL Server 2005简体中文开发版下载

正 文:    由于飘易手里有项目需要用到Microsoft SQL Server 2005数据库,电脑里原有的mssql2000已经不适用了,到网上寻找SQL Server 2005简体中文开发版的...
  • yu624774720hua
  • yu624774720hua
  • 2011年07月19日 21:30
  • 6868

Microsoft SQL Server 2005中的外键表与主键表

外键表就是要被连接的表; 主键表是要定义外键的主表。(!!寒啊!!)   上面先把结论写了,方便自己还有别人看的,下面是自己的一些啰嗦,   上个星期在写程序的时候突然发生了一个异常,   是...
  • xxhcust
  • xxhcust
  • 2012年05月17日 09:48
  • 1111

Microsoft SQL Server 2005资料库(数据库)卸载方法

SQL SERVER 2005不象SERVER 2000所有组件都汇总在一起,所以卸载时特别麻烦,如果不按正常的方法卸载,重新安装是不可能安装上去的。因为SQL SERVER 2005组件都是分散的,...
  • CB_CB
  • CB_CB
  • 2012年06月22日 12:12
  • 842
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#应用访问Microsoft SQL Server 2005分析服务
举报原因:
原因补充:

(最多只允许输入30个字)