Mapeando dados de parâmetro CLR
A tabela a seguir lista os tipos de dados da Microsoft SQL Server, seus equivalentes no Common Language Runtime (CLR) para SQL Server no namespace System.Data.SqlTypes e seus equivalentes de CLR nativos no Microsoft .NET Framework.
Tipos de dados SQL Server |
Tipo (em System.Data.SqlTypes ou Microsoft.SqlServer.Types) |
Tipo de dados CLR (.NET Framework) |
bigint |
SqlInt64 |
Int64, Nullable<Int64> |
binary |
SqlBytes, SqlBinary |
Byte[] |
bit |
SqlBoolean |
Boolean, Nullable<Boolean> |
char |
Nenhum |
Nenhum |
cursor |
Nenhum |
Nenhum |
date |
SqlDateTime |
DateTime, Nullable<DateTime> |
datetime |
SqlDateTime |
DateTime, Nullable<DateTime> |
datetime2 |
Nenhum |
DateTime, Nullable<DateTime> |
DATETIMEOFFSET |
None |
DateTimeOffset, Nullable<DateTimeOffset> |
decimal |
SqlDecimal |
Decimal, Nullable<Decimal> |
float |
SqlDouble |
Double, Nullable<Double> |
geography |
SqlGeography SqlGeography é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do SQL Server 2012 feature pack (em inglês). |
Nenhum |
geometry |
SqlGeometry SqlGeometry é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do SQL Server 2012 feature pack (em inglês). |
Nenhum |
hierarchyid |
SqlHierarchyId SqlHierarchyId é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do SQL Server 2012 feature pack (em inglês). |
Nenhum |
image |
Nenhum |
Nenhum |
int |
SqlInt32 |
Int32, Nullable<Int32> |
money |
SqlMoney |
Decimal, Nullable<Decimal> |
nchar |
SqlChars, SqlString |
String, Char[] |
ntext |
Nenhum |
Nenhum |
numeric |
SqlDecimal |
Decimal, Nullable<Decimal> |
nvarchar |
SqlChars, SqlString SQLChars é uma melhor correspondência para transferência e acesso a dados, e SQLString é uma melhor correspondência para executar operações de cadeia de caracteres. |
String, Char[] |
nvarchar(1), nchar(1) |
SqlChars, SqlString |
Char, String, Char[], Nullable<char> |
real |
SqlSingle (o intervalo de SqlSingle, no entanto, é maior que real) |
Single, Nullable<Single> |
rowversion |
Nenhum |
Byte[] |
smallint |
SqlInt16 |
Int16, Nullable<Int16> |
smallmoney |
SqlMoney |
Decimal, Nullable<Decimal> |
sql_variant |
Nenhum |
Object |
table |
Nenhum |
Nenhum |
text |
Nenhum |
Nenhum |
time |
Nenhum |
TimeSpan, Nullable<TimeSpan> |
timestamp |
Nenhum |
Nenhum |
tinyint |
SqlByte |
Byte, Nullable<Byte> |
uniqueidentifier |
SqlGuid |
Guid, Nullable<Guid> |
User-defined type(UDT) |
Nenhum |
A mesma classe que é associada ao tipo definido pelo usuário no mesmo assembly ou em um assembly dependente. |
varbinary |
SqlBytes, SqlBinary |
Byte[] |
varbinary(1), binary(1) |
SqlBytes, SqlBinary |
byte, Byte[], Nullable<byte> |
varchar |
Nenhum |
Nenhum |
xml |
SqlXml |
Nenhum |
Conversão automática de tipo de dados com parâmetros out
Um método CLR pode retornar informações para o código de chamada ou programa marcando um parâmetro input com o modificador out (Microsoft Visual C#) ou <Out()> ByRef (Microsoft Visual Basic). Se o parâmetro input for um tipo de dados CLR no namespace System.Data.SqlTypes, e o programa de chamada especificar seu tipo de dados equivalente do SQL Server como o parâmetro input, uma conversão de tipo ocorrerá automaticamente quando o método CLR retorna o tipo de dados..
Por exemplo, o seguinte procedimento armazenado CLR tem um parâmetro input do tipo de dados CLR SqlInt32 que é marcado com out (C#) ou <Out()> ByRef (Visual Basic):
[Microsoft.SqlServer.Server.SqlProcedure]
public static void PriceSum(out SqlInt32 value)
{ … }
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub PriceSum( <Out()> ByRef value As SqlInt32)
…
End Sub
Depois que o assembly é criado no banco de dados, o procedimento armazenado é criado no SQL Server com a seguinte Transact-SQL, que especifica um tipo de dados do SQL Server de int como um parâmetro OUTPUT:
CREATE PROCEDURE PriceSum (@sum int OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum
Quando o procedimento armazenado CLR é chamado, o tipo de dados SqlInt32 é automaticamente convertido em um tipo de dados int e retornado para o programa de chamada.
Entretanto, nem todos os tipos de dados CLR podem ser automaticamente convertidos em seus tipos de dados SQL Server equivalentes por um fora parâmetro out. A tabela a seguir lista estas exceções.
Tipo de dados CLR (SQL Server) |
Tipo de dados do SQL Server |
Decimal |
smallmoney |
SqlMoney |
smallmoney |
Decimal |
money |
DateTime |
smalldatetime |
SQLDateTime |
smalldatetime |
Consulte também
Outros recursos
Tipos de dados do SQL Server no .NET Framework
Histórico de alterações
Conteúdo atualizado |
---|
Adicionados os tipos SqlGeography, SqlGeometry e SqlHierarchyId à tabela de mapeamento. |