使用ADOMD.NET获取Analysis Services元数据
生活随笔
收集整理的這篇文章主要介紹了
使用ADOMD.NET获取Analysis Services元数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
0? 添加對Microsoft.AnalysisServices.AdomdClient.dll的引用;
???? 安裝了Adomd.net SDK后,該dll文件位于x::\Program Files\Microsoft.NET\Adomd.NET\80目錄下(x為盤符)。
???? 添加對dll文件的引用。
???? using Microsoft.AnalysisServices.AdomdClient;
1? 建立連接:
??? 與Ado.net類似,要使用ADOMD.NET連接Analysis Services服務器,必須建立一個AdomdConnection對象,以及一個connectionString連接字符串。然后調(diào)用 AdomdConnection類的Open或者Close方法打開或者關閉連接。
??? 代碼如下:
??? string connectionString = ""Data Source = JINGXIAO;Catalog=FoodMart 2000;ConnectTo=8.0;Integrated Security=SSPI";";
?? ?AdomdConnection conn = new AdomdConnection();
??? conn.Open();
??? conn.Close();
【注】如果沒有安裝MSXML4.0或者更高的版本,則運行上述代碼的時候,會顯示【無法與服務器建立連接的報錯框】。
2?? 獲取立方體的元數(shù)據(jù)
???? 獲取立方體(包括維度,度量,層次等)的元數(shù)據(jù)可以有兩種方法:
???? 第一種方法是通過查詢SchemaDataSet表來獲取;
???? 第二種方法通過AdomdConnection對象來獲取。
????? 2.1? 通過SchemaDataSet獲取元數(shù)據(jù)(以獲取立方體的元數(shù)據(jù)為例):
????? ?public string[] GetSchemaDataSet_Cubes(ref AdomdConnection connection,string connectionString)
??{
???string[] strCubes = null;
???bool connected? = true;?? //判斷connection是否已與數(shù)據(jù)庫連接
???DataTable objTable = new DataTable();
???if (IsConnected(ref connection) == false)
???{
????try
????{
?????Connect(ref connection,connectionString);
?????connected = false;
????}
????catch(Exception err)
????{
?????throw err;
????}??
???}???
???string[] strRestriction = new string[]{null,null,null};
???objTable = connection.GetSchemaDataSet(AdomdSchemaGuid.Cubes,strRestriction).Tables[0];?
???if(connected == false)
???{
????Disconnect(ref connection,false);
???}
???strCubes = new string[objTable.Rows.Count];
???int rowcount = 0;
???foreach(DataRow tempRow in objTable.Rows)
???{
????strCubes[rowcount] = tempRow["CUBE_NAME"].ToString();
????rowcount++;
???}
???return strCubes;
??}
????? 2.2? 通過AdomdConnection對象獲取元數(shù)據(jù):
????? public string[] GetCubes(ref AdomdConnection connection,string connectionString)
??{
???string[] strCubesName = null;
???bool connected? = true;?? //判斷connection是否已與數(shù)據(jù)庫連接
???if (IsConnected(ref connection) == false)
???{
????try
????{
?????Connect(ref connection,connection.ConnectionString);
?????connected = false;
????}
????catch(Exception err)
????{
?????throw err;
????}??
???}?
???
???int rowcount = connection.Cubes.Count;
???strCubesName = new string[rowcount];
???for(int i=0;i<rowcount;i++)
???{
????strCubesName[i] = connection.Cubes[i].Caption;
???}
???
???if(connected == false)
???{
????Disconnect(ref connection,false);
???}
???return strCubesName;????
??}
?????
獲取層次,命名集,等方法雷同。
???? 安裝了Adomd.net SDK后,該dll文件位于x::\Program Files\Microsoft.NET\Adomd.NET\80目錄下(x為盤符)。
???? 添加對dll文件的引用。
???? using Microsoft.AnalysisServices.AdomdClient;
1? 建立連接:
??? 與Ado.net類似,要使用ADOMD.NET連接Analysis Services服務器,必須建立一個AdomdConnection對象,以及一個connectionString連接字符串。然后調(diào)用 AdomdConnection類的Open或者Close方法打開或者關閉連接。
??? 代碼如下:
??? string connectionString = ""Data Source = JINGXIAO;Catalog=FoodMart 2000;ConnectTo=8.0;Integrated Security=SSPI";";
?? ?AdomdConnection conn = new AdomdConnection();
??? conn.Open();
??? conn.Close();
【注】如果沒有安裝MSXML4.0或者更高的版本,則運行上述代碼的時候,會顯示【無法與服務器建立連接的報錯框】。
2?? 獲取立方體的元數(shù)據(jù)
???? 獲取立方體(包括維度,度量,層次等)的元數(shù)據(jù)可以有兩種方法:
???? 第一種方法是通過查詢SchemaDataSet表來獲取;
???? 第二種方法通過AdomdConnection對象來獲取。
????? 2.1? 通過SchemaDataSet獲取元數(shù)據(jù)(以獲取立方體的元數(shù)據(jù)為例):
????? ?public string[] GetSchemaDataSet_Cubes(ref AdomdConnection connection,string connectionString)
??{
???string[] strCubes = null;
???bool connected? = true;?? //判斷connection是否已與數(shù)據(jù)庫連接
???DataTable objTable = new DataTable();
???if (IsConnected(ref connection) == false)
???{
????try
????{
?????Connect(ref connection,connectionString);
?????connected = false;
????}
????catch(Exception err)
????{
?????throw err;
????}??
???}???
???string[] strRestriction = new string[]{null,null,null};
???objTable = connection.GetSchemaDataSet(AdomdSchemaGuid.Cubes,strRestriction).Tables[0];?
???if(connected == false)
???{
????Disconnect(ref connection,false);
???}
???strCubes = new string[objTable.Rows.Count];
???int rowcount = 0;
???foreach(DataRow tempRow in objTable.Rows)
???{
????strCubes[rowcount] = tempRow["CUBE_NAME"].ToString();
????rowcount++;
???}
???return strCubes;
??}
????? 2.2? 通過AdomdConnection對象獲取元數(shù)據(jù):
????? public string[] GetCubes(ref AdomdConnection connection,string connectionString)
??{
???string[] strCubesName = null;
???bool connected? = true;?? //判斷connection是否已與數(shù)據(jù)庫連接
???if (IsConnected(ref connection) == false)
???{
????try
????{
?????Connect(ref connection,connection.ConnectionString);
?????connected = false;
????}
????catch(Exception err)
????{
?????throw err;
????}??
???}?
???
???int rowcount = connection.Cubes.Count;
???strCubesName = new string[rowcount];
???for(int i=0;i<rowcount;i++)
???{
????strCubesName[i] = connection.Cubes[i].Caption;
???}
???
???if(connected == false)
???{
????Disconnect(ref connection,false);
???}
???return strCubesName;????
??}
?????
獲取層次,命名集,等方法雷同。
我寫了一個小程序,仿照Application Block寫了一個AdomdHelper.cs的文件,對一些基本的獲取元數(shù)據(jù)的方法做了一些封裝(只完成了一小部分,以后還會不斷增加)。
參考:http://www.cnblogs.com/yiriqing/articles/917032.html
?
總結(jié)
以上是生活随笔為你收集整理的使用ADOMD.NET获取Analysis Services元数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人的腰线在哪
- 下一篇: ASP.Net上传文件带进度条、显示剩余