Hizkuntza

UDT grandes

Los tipos definidos por el usuario (UDT) permiten a los desarrolladores extender el sistema de tipo escalar del servidor mediante el almacenamiento de objetos de Common Language Runtime (CLR) en una base de datos de SQL Server. Los UDT pueden contener varios elementos y tener comportamientos, a diferencia de los tipos de datos de alias tradicionales, que se componen de un solo tipo de datos de sistema de SQL Server.

Nota

Para el acceso del cliente a UDT grandes, instale el paquete NuGet Microsoft.Data.SqlClient e importe Microsoft.Data.SqlClient. Los tipos CLR de SQL que definen el UDT del lado servidor permanecen en Microsoft.SqlServer.Server; no reemplace esos tipos por tipos de proveedor de cliente.

Anteriormente, los UDT estaban restringidos a un tamaño máximo de 8 kilobytes. En SQL Server 2008, esta restricción se ha eliminado en los UDT con un formato de UserDefined.

Para obtener la documentación completa de los tipos definidos por el usuario, consulta Tipos definidos por el usuario de CLR.

Recuperar los esquemas UDT mediante GetSchema

El GetSchema método devuelve información de esquema de base de datos en el DataTable objeto . Para obtener más información sobre el esquema, consulta Colecciones de esquemas de SQL Server.

Valores de columna de GetSchemaTable para los UDTs

El GetSchemaTable método devuelve metadatos de columna en el DataTable objeto . En la tabla siguiente se describen las diferencias en los metadatos de columna para los UDT de gran tamaño entre SQL Server 2005 y SQL Server 2008.

Columna de SqlDataReader SQL Server 2005 SQL Server 2008 y versiones posteriores
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 objeto de tres partes especificado como Database.SchemaName.TypeName.
IsLong Varía Varía

Consideraciones de SqlDataReader

La SqlDataReader clase admite valores UDT grandes en SQL Server 2008 y versiones posteriores. La forma en que el lector procesa estos valores depende de la versión de SQL Server y del Type System Version en el cadena de conexión. Para obtener más información, vea ConnectionString.

Cuando Type System Version es SQL Server 2005, los métodos siguientes SqlDataReader usan la representación binaria de udT grandes:

Para la misma configuración del sistema de tipos, GetValue devuelve el valor UDT grande como Byte[]. GetValues rellena la matriz proporcionada con valores de columna y devuelve el número de elementos rellenados. Los valores UDT grandes de esa matriz usan Byte[].

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

Especificación de SqlParameters

Las siguientes SqlParameter propiedades admiten UDT grandes.

Propiedades 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 de UDT de gran tamaño. La connectionString variable supone una conexión válida a una base de datos de SQL Server y la commandString variable supone una instrucción válida SELECT con la columna de clave principal enumerada primero.

using (SqlConnection connection = new SqlConnection(
    connectionString))
{
  connection.Open();
  SqlCommand command = new SqlCommand(commandString, connection);
  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)
    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

Consulte también