Mapeando dados de parâmetro CLR

Aplica-se a:SQL Server

A tabela a seguir lista os tipos de dados do Microsoft SQL Server, seus equivalentes no CLR (Common Language Runtime) para SQL Server no namespace System.Data.SqlTypes e seus equivalentes CLR nativos no Microsoft .NET Framework.

Tipo de dados do 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 Booliano, booliano anulável<>
char Nenhum Nenhum
cursor Nenhum Nenhum
date Sqldatetime DateTime, DateTime anulável<>
datetime Sqldatetime DateTime, DateTime anulável<>
datetime2 Nenhum DateTime, DateTime anulável<>
DATETIMEOFFSET Nenhum DateTimeOffset, DateTimeOffset anulável<>
decimal Sqldecimal Decimal, Decimal anulável<>
float Sqldouble Double, Double que permite<valor nulo>
geografia SqlGeography

SqlGeography é definido em Microsoft.SqlServer.Types.dll, que é instalado com SQL Server e pode ser baixado do SQL Server feature pack.
Nenhum
geometria SqlGeometry

SqlGeometry é definido em Microsoft.SqlServer.Types.dll, que é instalado com SQL Server e pode ser baixado do SQL Server feature pack.
Nenhum
hierarchyid SqlHierarchyId

SqlHierarchyId é definido em Microsoft.SqlServer.Types.dll, que é instalado com SQL Server e pode ser baixado do SQL Server feature pack.
Nenhum
imagem Nenhum Nenhum
int SqlInt32 Int32, Nullable<Int32>
money Sqlmoney Decimal, Decimal anulável<>
nchar SqlChars, SqlString String, Char[]
ntext Nenhum Nenhum
numeric SqlDecimal Decimal, Decimal anulável<>
nvarchar SqlChars, SqlString

SQLChars é uma correspondência melhor para transferência e acesso de dados, e SQLString é uma correspondência melhor para executar operações de cadeia de caracteres.
String, Char[]
nvarchar(1), nchar(1) SqlChars, SqlString Char, String, Char[], char anulável<>
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, Decimal anulável<>
sql_variant Nenhum Objeto
table Nenhum Nenhum
text Nenhum Nenhum
time Nenhum TimeSpan, TimeSpan que permite<valor nulo>
timestamp Nenhum Nenhum
tinyint SqlByte Byte, Byte anulável<>
uniqueidentifier Sqlguid Guid, Guid anulável<>
UDT (tipo definido pelo usuário) 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[], byte anulável<>
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 ou programa de chamada marcando um parâmetro de entrada com o modificador out (Microsoft Visual C#) ou <Out()> ByRef (Microsoft Visual Basic) Se o parâmetro de entrada for um tipo de dados CLR no namespace System.Data.SqlTypes, e o programa de chamada especificar seu SQL Server equivalente tipo de dados como o parâmetro de entrada, uma conversão de tipo ocorre automaticamente quando o método CLR retorna o tipo de dados.

Por exemplo, o procedimento armazenado CLR a seguir tem um parâmetro de entrada do tipo de dados CLR SqlInt32 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 e criado no banco de dados, o procedimento armazenado é criado em SQL Server com o transact-SQL a seguir, que especifica um tipo de dados 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 é convertido automaticamente em um tipo de dados int e retornado ao programa de chamada.

No entanto, nem todos os tipos de dados CLR podem ser convertidos automaticamente em seus tipos de dados de SQL Server equivalentes por meio de um 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

Histórico de alterações

Conteúdo atualizado
Foram adicionados os tipos SqlGeography, SqlGeometry e SqlHierarchyId à tabela de mapeamento.

Consulte Também

Tipos de dados do SQL Server no .NET Framework