表形式サーバー上の既存のデータベースを一覧表示する (AMO-TOM)
適用対象:
SQL Server 2016 以降のAnalysis Services
Azure Analysis Services
Power BI Premium
サーバー インスタンスに 接続されている Server オブジェクトがある場合は、 Server.Databases コレクションを反復処理して、 インスタンスによってホストされているすべてのデータベースを一覧表示できます。
Server.Databases コレクションには、サーバー モードに関係なく、サーバーでホストされているデータベースごとに 1 つの Database オブジェクトが含まれています。
Database.StorageEngineUsed プロパティを使用して、データベースの種類を確認できます。
表形式 1200 以上のデータベースでは、すべての表形式メタデータ オブジェクト (テーブル、列、リレーションシップなど) にアクセスできる null 以外の Database.Model プロパティが返されます。
多次元または表形式 1103 以下の場合、Database.Model プロパティは null になります。 この場合、表形式以外のメタデータは多次元プロパティ (Database.Cubes や Database.Dimensions など) で使用できますが、これらのプロパティは Microsoft.AnalysisServices.Tabular.Database (TOM の場合) ではなく、Microsoft.AnalysisServices.Database クラス (AMO から) によってのみ公開されます。 使用する Database クラスの詳細については、「TOM クライアント ライブラリのインストール、配布、および参照 」を参照してください。
Database.StorageEngineUsed が TabularMetadata に設定されていない限り、テーブル名前空間の他のクラスを使用してモデル ツリーにアクセスしたり操作したりすることはできません。
次の表は、サーバーまたはデータベースで Microsoft.AnalysisServices.Tabular クラスを使用してサーバーまたはデータベースに接続する場合の想定される動作をまとめたものです。
| mode | Database.model | Database.StorageEngineUsed |
|---|---|---|
| 表形式 1200 以降 | モデルの名前を返します | StorageEngineUsed.TabularMetadata |
| 表形式 1103、1100、1050 | null を返します | StorageEngineUsed.InMemory |
| 多次元 | null を返します | StorageEngineUsed.Traditional |
コード例: 既存のデータベースを一覧表示する
次のコードは、サーバーに接続し、サーバーによってホストされているデータベースを一覧表示する方法を示しています。
using System; using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.Tabular;
namespace TOMSamples
{
class Program
{
static void Main(string[] args)
{
//
// Connect to the local default instance of Analysis Services
//
string ConnectionString = "DataSource=localhost";
//
// The using syntax ensures the correct use of the
// Microsoft.AnalysisServices.Tabular.Server object.
//
using (Server server = new Server())
{
server.Connect(ConnectionString);
//
// List common properties for the databases on the server.
//
foreach (Database db in server.Databases)
{
Console.WriteLine("Properties for database {0}:", db.Name);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Database ID:\t\t\t{0}", db.ID);
Console.WriteLine("Database compatibility level:\t{0}", db.CompatibilityLevel);
Console.WriteLine("Database collation:\t\t{0}", db.Collation);
Console.WriteLine("Database created timestamp:\t{0}", db.CreatedTimestamp);
Console.WriteLine("Database language ID:\t\t{0}", db.Language);
Console.WriteLine("Database model type:\t\t{0}", db.ModelType);
Console.WriteLine("Database state:\t\t\t{0}", db.State);
Console.ResetColor();
Console.WriteLine();
}
}
Console.WriteLine("Press Enter to close this console window.");
Console.ReadLine();
}
}
}
データベースから項目を取得する
次のコード スニペットは、データベースから表形式または列を取得する方法を示しています。
var db = srv.Databases.GetByName("abc");
Column c1 = db.Model.Tables["foo"].Columns["bar"];
if (c1.ObjectType == ObjectType.Column) // always true
MetadataObject obj;
switch(obj.ObjectType)
{
case ObjectType.Table:
var t1 = (Table)obj;
break;
}