Hizkuntza
Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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:
- GetProviderSpecificFieldType devuelve el Type objeto para SqlBinary.
- GetProviderSpecificValue y GetSqlValue devuelven valores SqlBinary.
- GetProviderSpecificValues y GetSqlValues rellenan la matriz proporcionada con valores de columna específicos del proveedor y devuelven el número de elementos rellenados. Los valores UDT grandes de ese array usan SqlBinary.
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