Partilhar via


Definindo propriedades

Propriedades são valores que armazenam informações descritivas sobre o objeto. Por exemplo, as opções de configuração do Microsoft SQL Server são representadas pelas propriedades do objeto Configuration. As propriedades podem ser acessadas direta ou indiretamente por meio da coleção de propriedades. O acesso direto às propriedades usa a seguinte sintaxe:

objInstance.PropertyName

Um valor de propriedade pode ser modificado ou recuperado dependendo do tipo de acesso que tem a propriedade, ou seja, acesso de leitura/gravação ou acesso somente leitura. Também é necessário definir certas propriedades antes que um objeto possa ser criado. Para obter mais informações, consulte a referência SMO para o objeto em particular.

ObservaçãoObservação

Coleções de objetos filho aparecem como a propriedade de um objeto. Por exemplo, a coleção Tables é uma propriedade de um objeto Server. Para obter mais informações, consulte Usando coleções.

As propriedades de um objeto são membros da coleção Properties. A coleção Properties pode ser usada para iterar por cada propriedade de um objeto.

Às vezes, uma propriedade não está disponível pelas seguintes razões:

  • A versão do servidor não suporta a propriedade, como se você tentasse acessar uma propriedade que representasse um novo recurso do SQL Server em uma versão mais antiga do SQL Server.

  • O servidor não dá suporte a dados para a propriedade, como se você tentasse acessar uma propriedade que representasse um componente do SQL Server que não está instalado.

Você pode lidar com essas situações capturando as exceções do SMO UnknownPropertyException e PropertyCannotBeRetrievedException.

Definindo campos de inicialização padrão

O SMO executa uma otimização ao recuperar objetos. A otimização minimiza o número de propriedades carregado, dimensionando automaticamente entre os seguintes estados:

  1. Parcialmente carregado. Quando um objeto é referenciado pela primeira vez, ele tem um mínimo de propriedades disponíveis (como Nome e Esquema).

  2. Completamente carregado. Quando qualquer propriedade é referenciada, as propriedades restantes de carregamento rápido são inicializadas e disponibilizadas.

  3. Propriedades que consomem muita memória. As propriedades indisponíveis restantes consomem muita memória e têm um valor de propriedade Expensive definido como verdadeiro (como DataSpaceUsage). Essas propriedades só são carregadas quando especificamente referenciadas.

Se seu aplicativo busca outras propriedades, além daquelas fornecidas no estado parcialmente carregado, ele envia uma consulta para recuperar essas propriedades extras e sobe para o estado totalmente carregado. Isso pode gerar um tráfego desnecessário entre o cliente e o servidor. Para obter mais otimização, chame o método SetDefaultInitFields. O método SetDefaultInitFields permite a especificação das propriedades que são carregadas quando o objeto é inicializado.

O método SetDefaultInitFields define o comportamento de carregamento da propriedade para o restante do aplicativo ou até que ele seja reiniciado. Você pode salvar o comportamento original usando o método GetDefaultInitFields e pode restaurá-lo conforme necessário.

Exemplos

Para usar qualquer exemplo de código fornecido, será necessário escolher o ambiente de programação, o modelo de programação e a linguagem de programação para criar o aplicativo. Para mais informações, consulte "Como criar um projeto Visual Basic SMO no Visual Studio .NET" ou "Como criar um projeto Visual C# SMO no Visual Studio .NET" nos Manuais Online do SQL Server.

Obtendo e configurando uma propriedade no Visual Basic

Este exemplo de código mostra como obter a propriedade Edition do objeto Information e como definir a propriedade SqlExecutionModes da propriedade ConnectionContext como o membro ExecuteSql do tipo enumerado SqlExecutionModes.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Get a property.
Console.WriteLine(srv.Information.Version)
'Set a property.
srv.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteSql

Obtendo e configurando uma propriedade no Visual C#

Este exemplo de código mostra como obter a propriedade Edition do objeto Information e como definir a propriedade SqlExecutionModes da propriedade ConnectionContext como o membro ExecuteSql do tipo enumerado 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; 
}

Definindo várias propriedades antes de um objeto ser criado no Visual Basic

Este código de exemplo mostra como definir diretamente a propriedade AnsiNullsStatus do objeto Table, e como criar e adicionar colunas antes de criar o objeto Table.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Create a new table in the AdventureWorks2008R2 database. 
Dim db As Database
db = srv.Databases("AdventureWorks2008R2")
Dim tb As Table
'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. 
Dim c1 As Column
'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
Dim c2 As Column
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()

Definindo várias propriedades antes de um objeto ser criado no Visual C#

Este exemplo de código mostra como definir diretamente a propriedade AnsiNullsStatus do objeto Table, e como criar e adicionar colunas antes de criar o objeto Table.

{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Create a new table in the AdventureWorks2008R2 database. 
Database db; 
db = srv.Databases("AdventureWorks2008R2"); 
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(); 
}

Iterando por todas as propriedades de um objeto no Visual Basic

Este exemplo de código itera pela coleção Properties do objeto StoredProcedure e a exibe na tela Saída do Visual Studio.

No exemplo, o objeto Property foi colocado entre colchetes porque também é uma palavra-chave do Visual Basic.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Set properties on the uspGetEmployeeManagers stored procedure on the AdventureWorks2008R2 database.
Dim db As Database
db = srv.Databases("AdventureWorks2008R2")
Dim sp As StoredProcedure
sp = db.StoredProcedures("uspGetEmployeeManagers")
sp.AnsiNullsStatus = False
sp.QuotedIdentifierStatus = False
'Iterate through the properties of the stored procedure and display.
'Note the Property object requires [] parentheses to distinguish it from the Visual Basic key word.
Dim p As [Property]
For Each p In sp.Properties
    Console.WriteLine(p.Name & p.Value)
Next

Iterando por todas as propriedades de um objeto no Visual C#

Este exemplo de código itera pela coleção Properties do objeto StoredProcedure e a exibe na tela Saída do 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 AdventureWorks2008R2 database. 
Database db; 
db = srv.Databases("AdventureWorks2008R2"); 
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); 
  } 
}

Definindo campos de inicialização padrão no Visual Basic

Este exemplo de código mostra como minimizar o número de propriedades de objeto inicializadas em um programa de SMO. Você tem de incluir a instrução using System.Collections.Specialized; para usar o objeto StringCollection.

O SQL Server Profiler pode ser usado para comparar as instruções de número enviadas à instância do SQL Server com esta otimização.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks2008R2 database.
Dim db As Database
db = srv.Databases("AdventureWorks2008R2")
'Assign the Table object type to a System.Type object variable.
Dim tb As Table
Dim typ As Type
tb = New Table
typ = tb.GetType
'Assign the current default initialization fields for the Table object type to a 
'StringCollection object variable.
Dim sc As StringCollection
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 AdventureWorks2008R2.
'Note that the improvement in performance can be viewed in SQL Profiler.
For Each tb In db.Tables
    Console.WriteLine(tb.Schema + "." + tb.Name + " " + tb.CreateDate)
Next
'Set the default initialization fields for the Table object type back to the original settings.
srv.SetDefaultInitFields(typ, sc)

Definindo campos de inicialização padrão no Visual C#

Este exemplo de código mostra como minimizar o número de propriedades de objeto inicializadas em um programa de SMO. Você tem de incluir a instrução using System.Collections.Specialized; para usar o objeto StringCollection.

O SQL Server Profiler pode ser usado para comparar as instruções de número enviadas à instância do SQL Server com esta otimização.

{ 
//Connect to the local, default instance of SQL Server. 
Server srv; 
srv = new Server(); 
//Reference the AdventureWorks2008R2 database. 
Database db; 
db = srv.Databases("AdventureWorks2008R2"); 
//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 AdventureWorks2008R2. 
   //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); 
}