Mapeando dados de parâmetro CLR
A tabela a seguir lista os tipos de dados do MicrosoftSQL Server, seus equivalentes no CLR (Common Language Runtime) para SQL Server no namespace System.Data.SqlTypes e seus equivalentes de CLR nativos no Microsoft .NET Framework.
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 |
Histórico de alterações
Conteúdo atualizado |
---|
Adicionados os tipos SqlGeography, SqlGeometry e SqlHierarchyId à tabela de mapeamento. |