Idioma
Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os tipos definidos pelo usuário (UDTs) permitem que um desenvolvedor estenda o sistema de tipos escalares do servidor armazenando objetos CLR (Common Language Runtime) em um banco de dados do SQL Server. As UDTs podem conter vários elementos e podem ter comportamentos, ao contrário dos tipos de dados de alias tradicionais, que consistem em um único tipo de dados do sistema SQL Server.
Nota
Para acesso de clientes a grandes UDTs, instale o pacote NuGet Microsoft.Data.SqlClient e importe Microsoft.Data.SqlClient. Os tipos SQL CLR que definem o UDT do lado do servidor permanecem em Microsoft.SqlServer.Server; não substituam esses tipos por tipos cliente-fornecedor.
Anteriormente, as UDTs eram restritas a um tamanho máximo de 8 kilobytes. No SQL Server 2008, essa restrição foi removida para UDTs que têm um formato de UserDefined.
Para obter a documentação completa para tipos definidos pelo usuário, consulte CLR User-Defined Types.
Recuperando esquemas UDT usando GetSchema
O GetSchema método devolve informação do esquema da base de dados no DataTable objeto. Para obter mais informações, consulte Coleções de esquema do SQL Server.
Valores de coluna GetSchemaTable para UDTs
O GetSchemaTable método devolve metadados da coluna no DataTable objeto. A tabela a seguir descreve as diferenças nos metadados de coluna para UDTs grandes entre o SQL Server 2005 e o SQL Server 2008.
| Coluna SqlDataReader | SQL Server 2005 | SQL Server 2008 e posterior |
|---|---|---|
ColumnSize |
Varia | Varia |
NumericPrecision |
255 | 255 |
NumericScale |
255 | 255 |
DataType |
Byte[] |
Instância UDT |
ProviderSpecificDataType |
SqlTypes.SqlBinary |
Instância UDT |
ProviderType |
21 (SqlDbType.VarBinary) |
29 (SqlDbType.Udt) |
NonVersionedProviderType |
29 (SqlDbType.Udt) |
29 (SqlDbType.Udt) |
DataTypeName |
SqlDbType.VarBinary |
O nome das três partes especificado como Database.SchemaName.TypeName. |
IsLong |
Varia | Varia |
Considerações sobre SqlDataReader
A classe SqlDataReader suporta valores UDT de grandes dimensões no SQL Server 2008 e versões posteriores. A forma como o leitor processa estes valores depende da versão do SQL Server e da Type System Version cadeia de ligação. Para obter mais informações, veja ConnectionString.
Quando Type System Version é o SQL Server 2005, os seguintes SqlDataReader métodos utilizam a representação binária de grandes UDTs:
- GetProviderSpecificFieldType retorna o Type objeto para SqlBinary.
- GetProviderSpecificValue e GetSqlValue retornam valores SqlBinary.
- GetProviderSpecificValues e GetSqlValues preenchem o array fornecido com valores de coluna específicos do fornecedor e devolvem o número de elementos preenchidos. Valores grandes de UDT nesse array usam SqlBinary.
Para a mesma definição de sistema de tipos, GetValue devolve o valor grande do UDT como Byte[].
GetValues preenche o array fornecido com valores de coluna e devolve o número de elementos preenchidos. Valores grandes de UDT nesse array usam Byte[].
Observe que nenhuma conversão é feita para a versão atual do ADO.NET.
Especificando SqlParameters
As seguintes SqlParameter propriedades suportam grandes UDTs.
| Propriedade SqlParameter | Descrição |
|---|---|
| Value | Obtém ou define um objeto que representa o valor do parâmetro. O padrão é null. A propriedade pode ser SqlBinary, Byte[]ou um objeto gerenciado. |
| SqlValue | Obtém ou define um objeto que representa o valor do parâmetro. O padrão é null. A propriedade pode ser SqlBinary, Byte[]ou um objeto gerenciado. |
| Size | Obtém ou define o tamanho do valor do parâmetro a ser resolvido. O valor predefinido é 0. A propriedade pode ser um inteiro que representa o tamanho do valor do parâmetro. Para UDTs grandes, pode ser o tamanho real da UDT, ou -1 para desconhecido. |
Exemplo de recuperação de dados
O fragmento de código a seguir demonstra como recuperar grandes dados UDT. A connectionString variável assume uma ligação válida a uma base de dados SQL Server e a commandString variável assume uma instrução válida SELECT com a coluna da chave primária listada primeiro.
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