Compartir a través de


Establecer propiedades

Las propiedades son valores que almacenan información descriptiva sobre el objeto. Por ejemplo, las opciones de configuración de Microsoft SQL Server se representan mediante las Configuration propiedades del objeto. Se puede tener acceso a las propiedades directa o indirectamente mediante la colección de propiedades. El acceso a las propiedades usa directamente la sintaxis siguiente:

objInstance.PropertyName

Un valor de propiedad se puede modificar o recuperar en función de si la propiedad tiene acceso de lectura y escritura o acceso de solo lectura. También es necesario establecer determinadas propiedades antes de crear un objeto. Para obtener más información, vea la referencia de SMO para el objeto determinado.

Nota:

Las colecciones de objetos secundarios aparecen como la propiedad de un objeto . Por ejemplo, la Tables colección es una propiedad de un Server objeto . Para obtener más información, consulte Uso de colecciones.

Las propiedades de un objeto son miembros de la colección Properties. La colección Properties se puede usar para recorrer en iteración todas las propiedades de un objeto.

A veces, una propiedad no está disponible por los siguientes motivos:

  • La versión del servidor no admite la propiedad , como si intenta acceder a una propiedad que representa una nueva característica de SQL Server en una versión anterior de SQL Server.

  • El servidor no proporciona datos para la propiedad , como si intenta tener acceso a una propiedad que representa un componente de SQL Server que no está instalado.

Puede controlar estas circunstancias detectando las UnknownPropertyException excepciones de Y SMO PropertyCannotBeRetrievedException .

Establecer campos de inicialización predeterminados

SMO realiza una optimización al recuperar objetos. La optimización minimiza el número de propiedades cargadas mediante el escalado automático entre los estados siguientes:

  1. Cargado parcialmente. Cuando se hace referencia a un objeto por primera vez, tiene un mínimo de propiedades disponibles (como Name y Schema).

  2. Totalmente cargado. Cuando se hace referencia a cualquier propiedad, se inicializan las propiedades restantes que se cargan rápidamente y están disponibles.

  3. Propiedades que usan mucha memoria. Las propiedades restantes no disponibles usan una gran cantidad de memoria y tienen un Expensive valor de propiedad true (por ejemplo DataSpaceUsage, ). Estas propiedades solo se cargan cuando se hace referencia específicamente a ellas.

Si la aplicación captura propiedades adicionales, además de las proporcionadas en el estado parcialmente cargado, envía una consulta para recuperar estas propiedades adicionales y se escala verticalmente hasta el estado totalmente cargado. Esto puede provocar tráfico innecesario entre el cliente y el servidor. Se puede lograr más optimización llamando al SetDefaultInitFields método . El SetDefaultInitFields método permite la especificación de las propiedades que se cargan cuando se inicializa el objeto.

El SetDefaultInitFields método establece el comportamiento de carga de propiedades para el resto de la aplicación o hasta que se restablece. Puede guardar el comportamiento original mediante el GetDefaultInitFields método y restaurarlo según sea necesario.

Ejemplos

Para usar cualquier ejemplo de código que se proporcione, tendrá que elegir el entorno de programación, la plantilla de programación y el lenguaje de programación en el que se va a crear la aplicación. Para obtener más información, vea "How to: Create a Visual Basic SMO Project in Visual Studio .NET" o "How to: Create a Visual C# SMO Project in Visual Studio .NET" in SQL Server Books Online.

Obtener y establecer una propiedad en Visual Basic

En este ejemplo de código se muestra cómo obtener la Edition propiedad del Information objeto y cómo establecer la SqlExecutionModes propiedad de la ConnectionContext propiedad en el ExecuteSql miembro del SqlExecutionModes tipo enumerado.

Obtener y establecer una propiedad en Visual C#

En este ejemplo de código se muestra cómo obtener la Edition propiedad del Information objeto y cómo establecer la SqlExecutionModes propiedad de la ConnectionContext propiedad en el ExecuteSql miembro del SqlExecutionModes tipo enumerado.

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

Establecer varias propiedades antes de crear un objeto en Visual Basic

En este ejemplo de código se muestra cómo establecer directamente la AnsiNullsStatus propiedad del Table objeto y cómo crear y agregar columnas antes de crear el Table objeto.

Establecer varias propiedades antes de crear un objeto en Visual C#

En este ejemplo de código se muestra cómo establecer directamente la AnsiNullsStatus propiedad del Table objeto y cómo crear y agregar columnas antes de crear el Table objeto.

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

Iteración a través de todas las propiedades de un objeto en Visual Basic

Este ejemplo de código recorre en iteración la Properties colección del StoredProcedure objeto y los muestra en la pantalla Salida de Visual Studio.

En el ejemplo, el Property objeto se ha colocado entre paréntesis cuadrados porque también es una palabra clave de Visual Basic.

Recorrer en iteración todas las propiedades de un objeto en Visual C#

Este ejemplo de código recorre en iteración la Properties colección del StoredProcedure objeto y los muestra en la pantalla Salida de 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);   
  }   
}  

Establecer campos de inicialización predeterminados en Visual Basic

En este ejemplo de código se muestra cómo minimizar el número de propiedades de objeto inicializadas en un programa SMO. Debe incluir la using System.Collections.Specializedinstrucción ; para usar el StringCollection objeto .

SQL Server Profiler se puede usar para comparar las instrucciones number enviadas a la instancia de SQL Server con esta optimización.

Establecer campos de inicialización predeterminados en Visual C#

En este ejemplo de código se muestra cómo minimizar el número de propiedades de objeto inicializadas en un programa SMO. Debe incluir la using System.Collections.Specializedinstrucción ; para usar el StringCollection objeto .

SQL Server Profiler se puede usar para comparar las instrucciones number enviadas a la instancia de SQL Server con esta optimización.

{   
//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);   
}