C#应用访问Microsoft SQL Server 2005分析服务
2007-03-31 16:33
507 查看
原文出处:/article/5707221.html
接上次建立的多维数据集
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、 同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.dll(Microsoft SQL Server 2005为9.0版;Microsoft SQL Server 2000为8.0版)
有AdomdClient当然有AdomdServer,分析服务也包含了存储过程和CLR的存储过程。
l 在微软推出Microsoft SQL Server 2005之后,微软又为分析服务提供了多种访问方式。
下次有时间讲讲如何定时从SQL 2005更新数据到分析服务。
接上次建立的多维数据集
一、前言
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更新数据到分析服务。
相关文章推荐
- C#应用访问Microsoft SQL Server 2005分析服务
- [原创]C#应用访问Microsoft SQL Server 2005分析服务
- C#应用访问Microsoft SQL Server 2005分析服务
- Microsoft SQL Server 2005的分析服务 搭建数据仓库
- Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
- 29. 使用 Microsoft SQL Server 分析服务
- Microsoft SQL Server 分析服务
- T-SQL 编程与应用----学习笔记一[Microsoft SQL Server 2005]
- Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
- Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
- Microsoft SQL Server 2005 -- 错误 29503。SQL Server 服务无法启动
- ASP.NET通过写SQL文直接访问Microsoft SQL Server 2005
- 使用c#访问microsoft sql server compact (初级)
- SQL SERVER数据库开发之存储过程应用---[Microsoft Sql Server 2005]
- [转]Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
- vista安装具有高级服务的 Microsoft SQL Server 2005 Express Edition Service Pack 2
- Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
- SQL Server Mobile在WM中的应用(C#)
- SQL-Server2005mssqlserver服务与sqlexpress服务有什么区别
- 在SQL-server2005中如何对运行慢的查询进行分析?