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