Elencare i database esistenti in un server tabulare (AMO-TOM)

Si applica a: SQL Server 2016 e versioni successive Analysis Services Azure Analysis Services Power BI Premium

Quando si dispone di un oggetto Server connesso a un'istanza del server, è possibile scorrere la raccolta Server.Databases per elencare tutti i database ospitati dall'istanza.

La raccolta Server.Databases contiene un oggetto Database per ogni database ospitato nel server, indipendentemente dalla modalità server.

È possibile controllare il tipo di database tramite la proprietà Database.StorageEngineUsed.

I database tabulari 1200 e versioni successive restituiranno una proprietà Database.Model non Null che consente l'accesso a tutti gli oggetti di metadati tabulari: tabelle, colonne, relazioni e così via.

Per multidimensionali o tabulari 1103 e versioni seguenti, la proprietà Database.Model sarà Null. In questo caso, i metadati non tabulari saranno disponibili nelle proprietà multidimensionali (ad esempio Database.Cubes e Database.Dimensions), ma tali proprietà sono esposte solo dalla classe Microsoft.AnalysisServices.Database (da AMO), non da Microsoft.AnalysisServices.Tabular.Database (per TOM). Per altre informazioni sulla classe Database da usare, vedere Installare, distribuire e fare riferimento alla libreria client TOM.

A meno che Database.StorageEngineUsed non sia impostato su TabularMetadata, non sarà possibile usare altre classi nello spazio dei nomi tabulare per accedere o modificare l'albero del modello.

Nella tabella seguente vengono riepilogati i comportamenti previsti quando ci si connette a un server o a un database usando una classe Microsoft.AnalysisServices.Tabular in un server o in un database.

mode Database.model Database.StorageEngineUsed
Tabulare 1200 e versioni successive Restituisce il nome del modello StorageEngineUsed.TabularMetadata
Tabulare 1103, 1100, 1050 Restituisce Null StorageEngineUsed.InMemory
Multidimensionale Restituisce Null StorageEngineUsed.Traditional

Esempio di codice: Elencare i database esistenti

Il codice seguente illustra come connettersi al server ed elencare i database ospitati dal server.

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(); 
        } 
    } 
} 

Ottenere un elemento da un database

Nel frammento di codice seguente viene illustrato come ottenere una tabella o una colonna da un database.

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; 
}