C#中使用ADOMD.NET查询多维数据集的实现方法
本文实例讲述了C#中使用ADOMD.NET查询多维数据集的实现方法,分享给大家供大家参考。具体实现方法分析如下:
ADOMD.NET是用于与MicrosoftSQLServerAnalysisServices进行通信的Microsoft.NETFramework数据访问接口。ADOMD.NET可使用XMLforAnalysis协议与分析数据源通信,方法为使用TCP/IP或HTTP连接传输和接收符合XMLforAnalysis规范的SOAP请求和响应。命令可通过多维表达式(MDX)、数据挖掘扩展插件(DMX)、AnalysisServices脚本语言(ASSL)或者甚至是有限SQL语法来发送,并且可能不返回结果。可以使用ADOMD.NET对象模型来查询和操作分析数据、关键绩效指标(KPI)和挖掘模型。使用ADOMD.NET时,还可通过检索与OLEDB兼容的架构行集或者使用ADOMD.NET对象模型来查看和使用元数据。
ADOMD.NET数据访问接口由Microsoft.AnalysisServices.AdomdClient命名空间表示
实战,连接并查询多维数据集:
AdomdConnection_connection=newAdomdConnection(connectionString);
if(_connection!=null)
if(_connection.State==ConnectionState.Closed)
_connection.Open();
AdomdCommandcommand=_connection.CreateCommand();
StringBuildersb=newStringBuilder();
sb.Append("WITH");
sb.Append(" MEMBER[Product].[Category].[AllProducts].[X]AS1+1");
sb.Append("SELECT{([Date].[Calendar].[CY2002]),([Date].[Calendar].[CY2003])}*{([Measures].[ResellerSalesAmount])}ONCOLUMNS,");
sb.Append("{([Product].[Category].[Accessories]),([Product].[Category].[Bikes]),([Product].[Category].[Clothing]),");
sb.Append("([Product].[Category].[Components]),([Product].[Category].[X])}ONROWS");
sb.Append(" FROM[Step-by-Step]");
command.CommandText=sb.ToString();
varxmlreader=command.ExecuteXmlReader();
CellSetcellSet=CellSet.LoadXml(xmlreader);
_connection.Close();
vardt=ToDataTable(cellSet);
varv=dt.Rows.Count;
AdomdHelper.cs文件如下:
usingSystem.Data;
usingMicrosoft.AnalysisServices.AdomdClient;
namespaceWpfApplication1
{
///<summary>
///SummarydescriptionforAdomdHelper.
///</summary>
publicclassAdomdHelper
{
#region"==Enum============================================================"
publicenumVersions
{
Server,
Provider,
Client
}
#endregion
#region"==Methods============================================================"
//判断连接AdomdConnection对象是State是否处于Open状态。
publicboolIsConnected(refAdomdConnectionconnection)
{
return(!(connection==null))&&(connection.State!=ConnectionState.Broken)&&(connection.State!=ConnectionState.Closed);
}
///<summary>
///断开连接
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="destroyConnection">是否销毁连接</param>
publicvoidDisconnect(refAdomdConnectionconnection,booldestroyConnection)
{
try
{
if(!(connection==null))
{
if(connection.State!=ConnectionState.Closed)
{
connection.Close();
}
if(destroyConnection==true)
{
connection.Dispose();
connection=null;
}
}
}
catch(Exceptionex)
{
throwex;
}
}
///<summary>
///建立连接
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
publicvoidConnect(refAdomdConnectionconnection,stringconnectionString)
{
if(connectionString=="")
thrownewArgumentNullException("connectionString","Theconnectionstringisnotvalid.");
// EnsureanAdomdConnectionobjectexistsandthatitsConnectionStringpropertyisset.
if(connection==null)
connection=newAdomdConnection(connectionString);
else
{
Disconnect(refconnection,false);
connection.ConnectionString=connectionString;
}
try
{
connection.Open();
}
catch(Exceptionex)
{
throwex;
}
}
///<summary>
///获取OLAP数据库。
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
///<returns></returns>
publicDataTableGetSchemaDataSet_Catalogs(refAdomdConnectionconnection,stringconnectionString)
{
boolconnected=true; //判断connection在调用此函数时,是否已经处于连接状态
DataTableobjTable=newDataTable();
try
{
//Checkifavalidconnectionwasprovided.
if(IsConnected(refconnection)==false)
{
//如果连接不存在,则建立连接
Connect(refconnection,connectionString);
connected=false; //更改connection为未连接状态。
}
objTable=connection.GetSchemaDataSet(AdomdSchemaGuid.Catalogs,null).Tables[0];
if(connected==false)
{
//关闭连接
Disconnect(refconnection,false);
}
}
catch(Exceptionerr)
{
throwerr;
}
returnobjTable;
}
///<summary>
///通过SchemaDataSet的方式获取立方体
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
///<returns></returns>
publicstring[]GetSchemaDataSet_Cubes(refAdomdConnectionconnection,stringconnectionString)
{
string[]strCubes=null;
boolconnected=true; //判断connection是否已与数据库连接
DataTableobjTable=newDataTable();
if(IsConnected(refconnection)==false)
{
try
{
Connect(refconnection,connectionString);
connected=false;
}
catch(Exceptionerr)
{
throwerr;
}
}
string[]strRestriction=newstring[]{null,null,null};
objTable=connection.GetSchemaDataSet(AdomdSchemaGuid.Cubes,strRestriction).Tables[0];
if(connected==false)
{
Disconnect(refconnection,false);
}
strCubes=newstring[objTable.Rows.Count];
introwcount=0;
foreach(DataRowtempRowinobjTable.Rows)
{
strCubes[rowcount]=tempRow["CUBE_NAME"].ToString();
rowcount++;
}
returnstrCubes;
}
///<summary>
///通过SchemaDataSet的方式获取制定立方体的维度
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
///<returns></returns>
publicstring[]GetSchemaDataSet_Dimensions(refAdomdConnectionconnection,stringconnectionString,stringcubeName)
{
string[]strDimensions=null;
boolconnected=true; //判断connection是否已与数据库连接
DataTableobjTable=newDataTable();
if(IsConnected(refconnection)==false)
{
try
{
Connect(refconnection,connectionString);
connected=false;
}
catch(Exceptionerr)
{
throwerr;
}
}
string[]strRestriction=newstring[]{null,null,cubeName,null,null};
objTable=connection.GetSchemaDataSet(AdomdSchemaGuid.Dimensions,strRestriction).Tables[0];
if(connected==false)
{
Disconnect(refconnection,false);
}
strDimensions=newstring[objTable.Rows.Count];
introwcount=0;
foreach(DataRowtempRowinobjTable.Rows)
{
strDimensions[rowcount]=tempRow["DIMENSION_NAME"].ToString();
rowcount++;
}
returnstrDimensions;
}
///<summary>
///以connection的方式获取立方体
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
///<returns></returns>
publicstring[]GetCubes(refAdomdConnectionconnection,stringconnectionString)
{
string[]strCubesName=null;
boolconnected=true; //判断connection是否已与数据库连接
if(IsConnected(refconnection)==false)
{
try
{
Connect(refconnection,connection.ConnectionString);
connected=false;
}
catch(Exceptionerr)
{
throwerr;
}
}
introwcount=connection.Cubes.Count;
strCubesName=newstring[rowcount];
for(inti=0;i<rowcount;i++)
{
strCubesName[i]=connection.Cubes[i].Caption;
}
if(connected==false)
{
Disconnect(refconnection,false);
}
returnstrCubesName;
}
///<summary>
///获取立方体的维度
///</summary>
///<paramname="connection">AdomdConnection对象的实例</param>
///<paramname="connectionString">连接字符串</param>
///<paramname="CubeName">立方体名称</param>
///<returns></returns>
publicstring[]GetDimensions(refAdomdConnectionconnection,stringconnectionString,stringCubeName)
{
string[]strDimensions=null;
boolconnected=true;
if(IsConnected(refconnection)==false)
{
try
{
Connect(refconnection,connection.ConnectionString);
connected=false;
}
catch(Exceptionerr)
{
throwerr;
}
}
introwcount=connection.Cubes[CubeName].Dimensions.Count;
strDimensions=newstring[rowcount];
for(inti=0;i<rowcount;i++)
{
strDimensions[i]=connection.Cubes[CubeName].Dimensions[i].Caption.ToString();
}
if(connected==false)
{
Disconnect(refconnection,false);
}
returnstrDimensions;
}
#endregion
}
}
希望本文所述对大家的C#程序设计有所帮助。
相关文章
- C#索引器
- 【愚公系列】2023年01月 .NET/C#知识点-List对象去重的方法总结
- 【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结
- 【愚公系列】2023年02月 .NET/C#知识点-.NET Core配置文件详解
- MongoDB 使用.NET开发充分利用数据库性能(mongodb.net)
- 快速搭建 NET 项目,用 MySQL 配置环境(.net 配置mysql)
- 用Net和MySQL实现软件开发编程(.net mysql编程)
- 在Asp.net用C#建立动态Excel
- asp.net(c#)中取得文件物理路径
- ASP.NET(C#)应用程序配置文件app.config/web.config的增、删、改操作
- javascript与asp.net(c#)互相调用方法
- 在asp.net(c#)下实现调用cmd的方法
- 获取客户端IP地址c#/vb.net各自实现代码
- C#.NET字符串比较中忽略符号的方法
- c#实现IComparable、IComparer接口、Comparer类的详解
- C#开发Windows服务实例之实现禁止QQ运行
- .net(c#)中的new关键字详细介绍
- ASP.NET(C#)读取EXCEL另加解决日期问题的方法分享
- c#使用filesystemwatcher监视文件系统的变化
- SQLServer中调用C#类中的方法实例(使用.NET程序集)
- asp.net中c#自定义事件的实现方法详解