Condividi tramite


Impostazione delle proprietà

Le proprietà sono valori in cui sono archiviate informazioni descrittive sull'oggetto. Ad esempio, Le opzioni di configurazione di Microsoft SQL Server sono rappresentate dalle Configuration proprietà dell'oggetto. Alle proprietà è possibile accedere direttamente o indirettamente utilizzando la relativa raccolta. Per l'accesso diretto alle proprietà viene utilizzata la sintassi seguente:

objInstance.PropertyName

Un valore di proprietà può essere modificato o recuperato a seconda che la proprietà disponga di accesso in lettura/scrittura o di accesso in sola lettura. È inoltre necessario impostare determinate proprietà prima che sia possibile creare un oggetto. Per ulteriori informazioni, vedere la documentazione di riferimento di SMO per l'oggetto specifico.

Nota

Le raccolte di oggetti figlio vengono visualizzate come proprietà di un oggetto. La raccolta Tables è ad esempio una proprietà di un oggetto Server. Per altre informazioni, vedere Using Collections.

Le proprietà di un oggetto sono membri della raccolta Properties. Tale raccolta può essere utilizzata per scorrere tutte le proprietà di un oggetto.

Talvolta una proprietà non è disponibile per i motivi seguenti:

  • La versione del server non supporta la proprietà, ad esempio se si tenta di accedere a una proprietà che rappresenta una nuova funzionalità di SQL Server in una versione precedente di SQL Server.

  • Il server non fornisce dati per la proprietà, ad esempio se si tenta di accedere a una proprietà che rappresenta un componente SQL Server non installato.

Per gestire queste situazioni è possibile individuare le eccezioni SMO UnknownPropertyException e PropertyCannotBeRetrievedException.

Impostazione dei campi di inizializzazione predefiniti

SMO consente di eseguire un'ottimizzazione durante il recupero di oggetti. L'ottimizzazione riduce il numero di proprietà caricate mediante il passaggio automatico tra gli stati seguenti:

  1. Parzialmente caricato. Quando viene fatto riferimento a un oggetto per la prima volta, esso dispone di un minimo di proprietà disponibili (ad esempio Name e Schema).

  2. Completamente caricato. Quando viene fatto riferimento a una proprietà, le proprietà restanti, che sono rapide da caricare, vengono inizializzate e rese disponibili.

  3. Proprietà che utilizzano grandi quantità di memoria. Le restanti proprietà non disponibili utilizzano grandi quantità di memoria e presentano un valore True per la proprietà Expensive (ad esempio DataSpaceUsage). Tali proprietà vengono caricate solo quando viene fatto loro riferimento in modo specifico.

Se l'applicazione recupera proprietà aggiuntive, oltre a quelle fornite nello stato di caricamento parziale, invia una query per recuperarle e passa allo stato di caricamento completo. Ciò può provocare traffico non necessario tra il client e server. Per una maggiore ottimizzazione, è possibile chiamare il metodo SetDefaultInitFields. Il metodo SetDefaultInitFields consente la specifica delle proprietà caricate quando viene inizializzato l'oggetto.

Il metodo SetDefaultInitFields imposta il comportamento di caricamento della proprietà per la parte restante dell'applicazione o fino a quando non viene reimpostato. È possibile salvare il comportamento originale utilizzando il metodo GetDefaultInitFields e ripristinarlo come necessario.

Esempio

Per usare qualsiasi esempio di codice fornito, è necessario scegliere l'ambiente di programmazione, il modello di programmazione e il linguaggio di programmazione per la creazione dell'applicazione. Per ulteriori informazioni, vedere "Procedura: Creare un progetto Visual Basic SMO in Visual Studio .NET" o "Procedura: Creare un progetto Visual C# SMO in Visual Studio .NET" nella documentazione online di SQL Server.

Ottenere e impostare una proprietà in Visual Basic

In questo esempio di codice viene illustrato come ottenere la proprietà Edition dell'oggetto Information e come impostare la proprietà SqlExecutionModes della proprietà ConnectionContext sul membro ExecuteSql del tipo enumerato SqlExecutionModes.

Ottenere e impostare una proprietà in Visual C#

In questo esempio di codice viene illustrato come ottenere la proprietà Edition dell'oggetto Information e come impostare la proprietà SqlExecutionModes della proprietà ConnectionContext sul membro ExecuteSql del tipo enumerato SqlExecutionModes.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Get a property.   
Console.WriteLine(srv.Information.Version);   
//Set a property.   
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql;   
}  

Impostazione di diverse proprietà prima della creazione di un oggetto in Visual Basic

In questo esempio di codice viene illustrato come impostare direttamente la proprietà AnsiNullsStatus dell'oggetto Table e come creare e aggiungere colonne prima di creare l'oggetto Table.

Impostazione di diverse proprietà prima della creazione di un oggetto in Visual C#

In questo esempio di codice viene illustrato come impostare direttamente la proprietà AnsiNullsStatus dell'oggetto Table e come creare e aggiungere colonne prima di creare l'oggetto Table.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Create a new table in the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
Table tb;   
//Specify the parent database, table schema, and the table name in the constructor.   
tb = new Table(db, "Test_Table", "HumanResources");   
//Add columns because the table requires columns before it can be created.   
Column c1;   
//Specify the parent table, the column name, and data type in the constructor.   
c1 = new Column(tb, "ID", DataType.Int);   
tb.Columns.Add(c1);   
c1.Nullable = false;   
c1.Identity = true;   
c1.IdentityIncrement = 1;   
c1.IdentitySeed = 0;   
Column c2;   
c2 = new Column(tb, "Name", DataType.NVarChar(100));   
c2.Nullable = false;   
tb.Columns.Add(c2);   
tb.AnsiNullsStatus = true;   
//Create the table on the instance of SQL Server.   
tb.Create();   
}  

Scorrimento di tutte le proprietà di un oggetto in Visual Basic

In questo esempio di codice viene eseguita l'iterazione dell'insieme Properties dell'oggetto StoredProcedure e vengono visualizzati nella schermata Output di Visual Studio.

Nell'esempio l'oggetto Property è stato inserito tra parentesi quadre perché è anche una parola chiave di Visual Basic.

Scorrimento di tutte le proprietà di un oggetto in Visual C#

In questo esempio di codice viene eseguita l'iterazione dell'insieme Properties dell'oggetto StoredProcedure e vengono visualizzati nella schermata Output di Visual Studio.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Set properties on the uspGetEmployeedManagers stored procedure on the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
StoredProcedure sp;   
sp = db.StoredProcedures("uspGetEmployeeManagers");   
sp.AnsiNullsStatus = false;   
sp.QuotedIdentifierStatus = false;   
//Iterate through the properties of the stored procedure and display.   
  Property p;   
  foreach ( p in sp.Properties) {   
    Console.WriteLine(p.Name + p.Value);   
  }   
}  

Impostazione dei campi di inizializzazione predefiniti in Visual Basic

In questo esempio di codice viene illustrato come ridurre il numero di proprietà dell'oggetto inizializzate in un programma SMO. È necessario includere l'istruzione using System.Collections.Specialized per utilizzare l'oggetto StringCollection.

SQL Server Profiler può essere usato per confrontare le istruzioni numeriche inviate all'istanza di SQL Server con questa ottimizzazione.

Impostazione dei campi di inizializzazione predefiniti in Visual C#

In questo esempio di codice viene illustrato come ridurre il numero di proprietà dell'oggetto inizializzate in un programma SMO. È necessario includere l'istruzione using System.Collections.Specialized per utilizzare l'oggetto StringCollection.

SQL Server Profiler può essere usato per confrontare le istruzioni numeriche inviate all'istanza di SQL Server con questa ottimizzazione.

{   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Reference the AdventureWorks2012 database.   
Database db;   
db = srv.Databases("AdventureWorks2012");   
//Assign the Table object type to a System.Type object variable.   
Table tb;   
Type typ;   
tb = new Table();   
typ = tb.GetType;   
//Assign the current default initialization fields for the Table object type to a   
//StringCollection object variable.   
StringCollection sc;   
sc = srv.GetDefaultInitFields(typ);   
//Set the default initialization fields for the Table object type to the CreateDate property.   
srv.SetDefaultInitFields(typ, "CreateDate");   
//Retrieve the Schema, Name, and CreateDate properties for every table in AdventureWorks2012.   
   //Note that the improvement in performance can be viewed in SQL Server Profiler.   
foreach ( tb in db.Tables) {   
   Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate);   
}   
//Set the default initialization fields for the Table object type back to the original settings.   
srv.SetDefaultInitFields(typ, sc);   
}