Share via


UDT grandes en SQL Server 2008 (ADO.NET)

Los tipos definidos por el usuario (UDT) incluidos en SQL Server 2005 permiten que el programador amplíe el sistema de tipos escalares del servidor mediante el almacenamiento de objetos Common Language Runtime (CLR) en una base de datos SQL Server. Los UDT pueden contener varios elementos y presentar diversos comportamientos, a diferencia de los tipos de datos de alias tradicionales, que constan de un solo tipo de datos del sistema SQL Server.

NotaNota

Debe instalar .NET Framework 3.5 SP1 (o posterior) para aprovechar la compatibilidad de SqlClient mejorada para UDT grandes.

Anteriormente, los UDT tenían un tamaño máximo de 8 kilobytes. En SQL Server 2008, se ha quitado esta restricción para los UDT que tiene un formato de UserDefined.

Para obtener la documentación completa de los UDT, vea la versión de los Libros en pantalla de SQL Server de la versión de SQL Server que use.

SQL Server 2005

SQL Server 2008

Tipos CLR definidos por el usuario

Tipos CLR definidos por el usuario

Recuperar los esquemas UDT mediante GetSchema

El método GetSchema de SqlConnection devuelve la información de un esquema de base de datos de un elemento DataTable. Para obtener más información, vea Colecciones de esquemas SQL Server (ADO.NET).

Valores de columna de GetSchemaTable para los UDT

El método GetSchemaTable de SqlDataReader devuelve DataTable que describe los metadatos de columna. La siguiente tabla describe las diferencias de los metadatos de columna para UDT grandes entre SQL Server 2005 y SQL Server 2008.

Columna SqlDataReader

SQL Server 2005

SQL Server 2008

ColumnSize

Varía

Varía

NumericPrecision

255

255

NumericScale

255

255

DataType

Byte[]

Instancia de UDT

ProviderSpecificDataType

SqlTypes.SqlBinary

Instancia de UDT

ProviderType

21 (SqlDbType.VarBinary)

29 (SqlDbType.Udt)

NonVersionedProviderType

29 (SqlDbType.Udt)

29 (SqlDbType.Udt)

DataTypeName

SqlDbType.VarBinary

Nombre de tres partes especificado como Database.SchemaName.TypeName.

IsLong

Varía

Varía

Consideraciones de SqlDataReader

La clase SqlDataReader se ha ampliado en SQL Server 2008 para admitir la recuperación de valores UDT grandes. El procesamiento de los valores UDT grandes por parte de [SqlDataReader] depende de la versión de SQL Server que use, así como de la Type System Version especificada en la cadena de conexión. Para obtener más información, vea la sección "Cambios de Type System Version" de Nuevas características en SQL Server 2008 (ADO.NET).

Los siguientes métodos de SqlDataReader devolverán SqlBinary en vez de una instancia de UDT en versiones anteriores de SQL Server, o cuando Type System Version no especifique SQL Server 2008:

Los siguientes métodos devolverán una matriz de Byte[] en vez de una instancia de UDT en versiones anteriores de SQL Server, o cuando Type System Version no especifique SQL Server 2008:

Tenga en cuenta que no se realiza ninguna conversión para la versión actual de ADO.NET.

Especificar SqlParameters

Las siguientes propiedades de SqlParameter se han ampliado para trabajar con UDT grandes.

Propiedad de SqlParameter

Descripción

Value

Obtiene o establece un objeto que representa el valor del parámetro. El valor predeterminado es NULL. La propiedad puede ser SqlBinary, Byte[] o un objeto administrado.

SqlValue

Obtiene o establece un objeto que representa el valor del parámetro. El valor predeterminado es NULL. La propiedad puede ser SqlBinary, Byte[] o un objeto administrado.

Size

Obtiene o establece el tamaño del valor del parámetro que se va a resolver. El valor predeterminado es 0. La propiedad puede ser un entero que represente el tamaño del valor del parámetro. En UDT grandes, puede ser el tamaño real del UDT o -1 si no se conoce.

Ejemplo de recuperación de datos

El fragmento de código siguiente muestra cómo se recuperan datos UDT grandes. La variable connectionString asume una conexión válida con una base de datos de SQL Server y la variable commandString, una instrucción SELECT válida con la columna de clave principal en primer lugar.

using (SqlConnection connection = new SqlConnection( 
    connectionString, commandString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(commandString);
  SqlDataReader reader = command.ExecuteReader();
  while (reader.Read())
  {
    // Retrieve the value of the Primary Key column.
    int id = reader.GetInt32(0);
      
    // Retrieve the value of the UDT.
    LargeUDT udt = (LargeUDT)reader[1];

    // You can also use GetSqlValue and GetValue.
    // LargeUDT udt = (LargeUDT)reader.GetSqlValue(1);
    // LargeUDT udt = (LargeUDT)reader.GetValue(1);

    Console.WriteLine(
     "ID={0} LargeUDT={1}", id, udt);
  }
reader.close
}
Using connection As New SqlConnection( _
    connectionString, commandString)
    connection.Open()
    Dim command As New SqlCommand(commandString, connection)
    Dim reader As SqlDataReader
    reader = command.ExecuteReader

    While reader.Read()
      ' Retrieve the value of the Primary Key column.
      Dim id As Int32 = reader.GetInt32(0)

      ' Retrieve the value of the UDT.
      Dim udt As LargeUDT = CType(reader(1), LargeUDT)

     ' You can also use GetSqlValue and GetValue.
     ' Dim udt As LargeUDT = CType(reader.GetSqlValue(1), LargeUDT)
     ' Dim udt As LargeUDT = CType(reader.GetValue(1), LargeUDT)

      ' Print values.
      Console.WriteLine("ID={0} LargeUDT={1}", id, udt)
    End While
    reader.Close()
End Using

Vea también

Conceptos

Configurar parámetros y tipos de datos de parámetros (ADO.NET)

Asignar tipos de datos de SQL Server (ADO.NET)

Otros recursos

Recuperar información de esquema de la base de datos (ADO.NET)

Datos binarios y de valores grandes de SQL Server (ADO.NET)