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) do 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, Int64 anulável<> |
binary | SqlBytes, SqlBinary | Byte[] |
bit | SqlBoolean | Booleano, Booleano 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 | Nenhuma | DateTimeOffset, DateTimeOffset anulável<> |
decimal | SqlDecimal | Decimal, Decimal anulável<> |
float | SqlDouble | Duplo, Duplo anulável<> |
geografia | SqlGeography SqlGeography é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do pacote de recursos do SQL Server. |
Nenhum |
geometria | SqlGeometry SqlGeometry é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do pacote de recursos do SQL Server. |
Nenhum |
hierarchyid | SqlHierarchyId SqlHierarchyId é definido no Microsoft.SqlServer.Types.dll, que é instalado com o SQL Server e pode ser baixado do pacote de recursos do SQL Server. |
Nenhum |
imagem | Nenhum | Nenhum |
int | SqlInt32 | Int32, Int32 anulável<> |
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 a 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 o real) | Único, Único anulável<> |
rowversion | Nenhum | Byte[] |
smallint | SqlInt16 | Int16, Int16 anulável<> |
smallmoney | SqlMoney | Decimal, Decimal anulável<> |
sql_variant | Nenhum | Objeto |
table | Nenhum | Nenhum |
text | Nenhum | Nenhum |
time | Nenhum | TimeSpan, TimeSpan anulável<> |
timestamp | Nenhum | Nenhum |
tinyint | SqlByte | Byte, Byte anulável<> |
uniqueidentifier | SqlGuid | Guid, Guid anulável<> |
Tipo definido pelo usuário (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[], 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 tipo de dados equivalente do SQL Server 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 no SQL Server com o 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 é 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 equivalentes do SQL Server 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 |
---|
Adicionados os tipos SqlGeography, SqlGeometria e SqlHierarchyId à tabela de mapeamento. |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de