📄 frmapis.cs
字号:
#region Using directives
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.AnalysisServices.AdomdClient;
using System.Xml;
using System.Xml.Xsl;
using System.IO;
#endregion
namespace Chapter19
{
partial class ADOMDNET : Form
{
#region Initialization
private string ConnectionString;
private AdomdConnection conn = new AdomdConnection();
private CellSet cs;
public ADOMDNET()
{
InitializeComponent();
}
#endregion
#region Connection Config
private void btnConnect_Click(object sender, EventArgs e)
{
// Prep DataLink/ADO classic objects
MSDASC.DataLinks objDataSourceDlg = new MSDASC.DataLinks();
ADODB.Connection adoConnection = new ADODB.Connection();
adoConnection.ConnectionString = "Provider=MSOLAP;Integrated Security=SSPI;Data Source=localhost";
object objTempConn = (object)adoConnection;
// Show DataLink dialog
if (objDataSourceDlg.PromptEdit(ref objTempConn))
{
//*******************************************************
// Crack open and extract Data Source, Initial Catalog
//*******************************************************
string[] connstuff = adoConnection.ConnectionString.Split(new char[] { ';' });
foreach (string s in connstuff)
{
// Display server name and update ConnectionString
if (s.StartsWith("Data Source"))
{
ConnectionString += s + ";";
string[] serverstuff = s.Split(new char[] { '=' });
txtServer.Text = serverstuff[1];
}
// Display database name and update ConnectionString
if (s.StartsWith("Initial Catalog"))
{
ConnectionString += s + ";";
string[] dbstuff = s.Split(new char[] { '=' });
txtDatabase.Text = dbstuff[1];
}
}
//*******************************************************
//*******************************************************
// Populate cboCubes with all cubes in selected database
//*******************************************************
AdomdConnection conn = new AdomdConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
cboCubes.Items.Clear();
foreach (CubeDef c in conn.Cubes)
{
if (c.Type == CubeType.Cube)
{
cboCubes.Items.Add(c.Name);
}
}
conn.Close();
if (cboCubes.Items.Count > 0)
cboCubes.SelectedIndex = 0;
//*******************************************************
// UI
cboCubes.Enabled = true;
cboQueryOptions.Enabled = true;
btnMetaData.Enabled = true;
rdoData.Enabled = true;
grpOther.Enabled = true;
}
}
#endregion
#region Metadata via ADO MD.NET
private void btnMetaData_Click(object sender, EventArgs e)
{
#region Initialization
dgvResults.BringToFront();
// Special constant needed to retrieve Action content from cube:
const int MDACTION_COORDINATE_CUBE = 1;
const int MDACTION_COORDINATE_DIMENSION = 2;
const int MDACTION_COORDINATE_LEVEL = 3;
const int MDACTION_COORDINATE_MEMBER = 4;
const int MDACTION_COORDINATE_SET = 5;
const int MDACTION_COORDINATE_CELL = 6;
//Initialize connection
conn.ConnectionString = ConnectionString;
conn.Open();
// Initialize Cube reference
CubeDef cube;
cube = conn.Cubes[cboCubes.Text];
// Initialize general purpose DataTable
DataTable dt;
#endregion
try
{
// Fetch selected metadata
switch (cboQueryOptions.Text)
{
#region Measure Groups
case "Measure Groups*":
{
DataSet ds = conn.GetSchemaDataSet(AdomdSchemaGuid.MeasureGroups, null);
dgvResults.DataSource = ds.Tables[0];
break;
}
#endregion
#region Measures
case "Measures":
{
dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Description");
dt.Columns.Add("Caption");
dt.Columns.Add("UniqueName");
dt.Columns.Add("Expression");
dt.Columns.Add("Units");
dt.Columns.Add("NumericPrecision");
dt.Columns.Add("NumericScale");
dt.Columns.Add("ParentCube");
foreach (Measure m in cube.Measures)
{
DataRow newrow = dt.Rows.Add();
newrow[0] = m.Name;
newrow[1] = m.Description;
newrow[2] = m.Caption;
newrow[3] = m.UniqueName;
newrow[4] = m.Expression;
newrow[5] = m.Units;
newrow[6] = m.NumericPrecision;
newrow[7] = m.NumericScale;
newrow[8] = m.ParentCube;
}
dgvResults.DataSource = dt;
break;
}
#endregion
#region Dimensions
case "Dimensions":
{
dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Description");
dt.Columns.Add("Caption");
dt.Columns.Add("UniqueName");
dt.Columns.Add("AttributeHierarchies");
dt.Columns.Add("Hierarchies");
dt.Columns.Add("WriteEnabled");
dt.Columns.Add("ParentCube");
foreach (Dimension d in cube.Dimensions)
{
DataRow newrow = dt.Rows.Add();
newrow[0] = d.Name;
newrow[1] = d.Description;
newrow[2] = d.Caption;
newrow[3] = d.UniqueName;
newrow[4] = d.AttributeHierarchies.Count;
newrow[5] = d.Hierarchies.Count;
newrow[6] = d.WriteEnabled;
newrow[7] = d.ParentCube;
}
dgvResults.DataSource = dt;
break;
}
#endregion
#region Hierarchies
case "Hierarchies":
{
Dimension dim = cube.Dimensions["Geography"];
dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Description");
dt.Columns.Add("Caption");
dt.Columns.Add("UniqueName");
dt.Columns.Add("HierarchyOrigin");
dt.Columns.Add("ParentDimension");
dt.Columns.Add("DisplayFolder");
dt.Columns.Add("Levels");
dt.Columns.Add("DefaultMember");
foreach (Hierarchy h in cube.Dimensions["Geography"].Hierarchies)
{
DataRow newrow = dt.Rows.Add();
newrow[0] = h.Name;
newrow[1] = h.Description;
newrow[2] = h.Caption;
newrow[3] = h.UniqueName;
newrow[4] = h.HierarchyOrigin;
newrow[5] = h.ParentDimension;
newrow[6] = h.DisplayFolder;
newrow[7] = h.Levels.Count.ToString();
newrow[8] = h.DefaultMember;
}
dgvResults.DataSource = dt;
break;
}
#endregion
#region Attributes Hierarchies
case "Attributes":
{
dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Description");
dt.Columns.Add("Caption");
dt.Columns.Add("UniqueName");
dt.Columns.Add("HierarchyOrigin");
dt.Columns.Add("ParentDimension");
dt.Columns.Add("DisplayFolder");
dt.Columns.Add("Levels");
dt.Columns.Add("DefaultMember");
foreach (Hierarchy h in cube.Dimensions["Geography"].AttributeHierarchies)
{
DataRow newrow = dt.Rows.Add();
newrow[0] = h.Name;
newrow[1] = h.Description;
newrow[2] = h.Caption;
newrow[3] = h.UniqueName;
newrow[4] = h.HierarchyOrigin;
newrow[5] = h.ParentDimension;
newrow[6] = h.DisplayFolder;
newrow[7] = h.Levels.Count.ToString();
newrow[8] = h.DefaultMember;
}
dgvResults.DataSource = dt;
break;
}
#endregion
#region Levels
case "Levels":
{
Hierarchy hier = cube.Dimensions["Geography"].Hierarchies["Geography"];
dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Description");
dt.Columns.Add("Caption");
dt.Columns.Add("UniqueName");
dt.Columns.Add("ParentHierarchy");
dt.Columns.Add("LevelNumber");
dt.Columns.Add("MemberCount");
dt.Columns.Add("LevelType");
foreach (Level l in hier.Levels)
{
DataRow newrow = dt.Rows.Add();
newrow[0] = l.Name;
newrow[1] = l.Description;
newrow[2] = l.Caption;
newrow[3] = l.UniqueName;
newrow[4] = l.ParentHierarchy.Name;
newrow[5] = l.LevelNumber.ToString();
newrow[6] = l.MemberCount.ToString();
newrow[7] = l.LevelType;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -