表形式サーバー上の既存のデータベースを一覧表示する (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; 
}