Compartir a través de


Asignar datos de parámetros CLR

En la tabla siguiente se enumeran tipos de datos de Microsoft SQL Server, sus equivalentes en CLR (Common Language Runtime) para SQL Server en el espacio de nombres System.Data.SqlTypes y sus equivalentes CLR nativos en Microsoft .NET Framework.

Tipo de datos de SQL Server

Tipo (en System.Data.SqlTypes o Microsoft.SqlServer.Types)

Tipo de datos CLR (.NET Framework)

bigint

SqlInt64

Int64, Nullable<Int64>

binary

SqlBytes, SqlBinary

Byte[]

bit

SqlBoolean

Boolean, Nullable<Boolean>

char

Ninguna

Ninguna

cursor

Ninguna

Ninguna

date

SqlDateTime

DateTime, Nullable<DateTime>

datetime

SqlDateTime

DateTime, Nullable<DateTime>

datetime2

Ninguna

DateTime, Nullable<DateTime>

DATETIMEOFFSET

None

DateTimeOffset, Nullable<DateTimeOffset>

decimal

SqlDecimal

Decimal, Nullable<Decimal>

float

SqlDouble

Double, Nullable<Double>

geography

SqlGeography

SqlGeography se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y puede descargarse desde el Feature Pack de SQL Server 2008.

Ninguno

geometry

SqlGeometry

SqlGeometry se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y puede descargarse desde el Feature Pack de SQL Server 2008.

Ninguno

hierarchyid

SqlHierarchyId

SqlHierarchyId se define en Microsoft.SqlServer.Types.dll, que se instala con SQL Server y puede descargarse desde el Feature Pack de SQL Server 2008.

Ninguno

image

Ninguno

Ninguno

int

SqlInt32

Int32, Nullable<Int32>

money

SqlMoney

Decimal, Nullable<Decimal>

nchar

SqlChars, SqlString

String, Char[]

ntext

Ninguno

Ninguno

numeric

SqlDecimal

Decimal, Nullable<Decimal>

nvarchar

SqlChars, SqlString

SQLChars es más adecuado para la transferencia de datos y el acceso a los mismos, mientras que SQLString es mejor para realizar operaciones de cadena.

String, Char[]

nvarchar(1), nchar(1)

SqlChars, SqlString

Char, String, Char[], Nullable<char>

real

SqlSingle

Single, Nullable<Single>

rowversion

Ninguna

Byte[]

smallint

SqlInt16

Int16, Nullable<Int16>

smallmoney

SqlMoney

Decimal, Nullable<Decimal>

sql_variant

Ninguna

Object

table

Ninguna

Ninguna

text

Ninguna

Ninguna

time

Ninguna

TimeSpan, Nullable<TimeSpan>

timestamp

Ninguna

Ninguna

tinyint

SqlByte

Byte, Nullable<Byte>

uniqueidentifier

SqlGuid

Guid, Nullable<Guid>

User-defined type(UDT)

Ninguna

La misma clase que está enlazada al tipo definido por el usuario en el mismo ensamblado o en un ensamblado dependiente.

varbinary

SqlBytes, SqlBinary

Byte[]

varbinary(1), binary(1)

SqlBytes, SqlBinary

byte, Byte[], Nullable<byte>

varchar

Ninguno

Ninguno

xml

SqlXml

Ninguno

Conversión automática de tipos de datos con parámetros OUT

Un método CLR puede devolver información al código o programa de llamada marcando un parámetro de entrada con el modificador out (Microsoft Visual C#) o <Out()> ByRef (Microsoft Visual Basic). Si el parámetro de entrada es un tipo de datos CLR del espacio de nombres System.Data.SqlTypes y el programa de llamada especifica su tipo de datos de SQL Server equivalente como parámetro de entrada, se produce una conversión de tipos automáticamente cuando el método CLR devuelve el tipo de datos.

Por ejemplo, el siguiente procedimiento almacenado CLR tiene un parámetro de entrada de tipos de datos CLR SqlInt32 que se marca con out (C#) o <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

Una vez generado y creado el ensamblado en la base de datos, el procedimiento almacenado se crea en SQL Server con el siguiente Transact-SQL, que especifica un tipo de datos SQL Server de int como parámetro OUTPUT:

CREATE PROCEDURE PriceSum (@sum int OUTPUT)
AS EXTERNAL NAME TestStoredProc.StoredProcedures.PriceSum

Cuando se llama al procedimiento almacenado CLR, el tipo de datos SqlInt32 se convierte automáticamente en un tipo de datos int y se devuelve al programa que hace la llamada.

Pero no todos los tipos de datos CLR se pueden convertir automáticamente en sus tipos de datos SQL Server equivalentes mediante un parámetro OUT. En la tabla siguiente se enumeran estas excepciones.

Tipo de datos CLR (SQL Server)

Tipo de datos de SQL Server

Decimal

smallmoney

SqlMoney

smallmoney

Decimal

money

DateTime

smalldatetime

SQLDateTime

smalldatetime