Sunteți pe pagina 1din 9

Alumno: Arriola Guzmn Luis Rubn.

Matrcula: 28085468

Tipos de Asignacin SQL


Debido a las diferencias entre CLR y SQL Server en cuanto a la precisin y la ejecucin, puede recibir diferentes resultados o experimentar un comportamiento distinto en funcin de dnde se realicen los clculos. Los clculos realizados en las consultas LINQ to SQL se traducen, de hecho, a TransactSQL y despus se ejecutan en la base de datos de SQL Server. Los clculos realizados fuera de las consultas LINQ to SQL se ejecutan en el contexto de CLR. Por ejemplo, las siguientes son algunas de las diferencias de comportamiento entre CLR y SQL Server: SQL Server ordena ciertos tipos de datos de forma diferente a los datos del tipo equivalente en CLR. Por ejemplo, los datos de SQL Server del tipo UNIQUEIDENTIFIER se ordenan de forma diferente a los datos de CLR del tipo System.Guid. SQL Server trata ciertas operaciones de comparacin de cadenas de forma diferente a CLR. En SQL Server, el comportamiento de comparacin de cadenas depende de la configuracin de intercalacin del servidor. Para obtener ms informacin, vea Trabajar con intercalaciones en los Libros en pantalla de SQL Server. SQL Server puede devolver valores diferentes a los que devuelve CLR para algunas funciones asignadas. Por ejemplo, las funciones de igualdad tendrn resultados distintos porque SQL Server considera que dos cadenas son iguales si solo se diferencian en el espacio en blanco final, mientras que CLR considera que no son iguales.

Asignacin de enumeracin
LINQ to SQL admite la asignacin del tipo System.Enum de CLR a tipos de SQL Server de dos maneras: Asignacin a tipos SQL numricos (TINYINT, SMALLINT, INT, BIGINT) Al asignar un tipo System.Enum de CLR a un tipo numrico de SQL, el valor entero subyacente del tipo System.Enum de CLR se asigna al valor de la columna de base de datos de SQL Server. Por ejemplo, si un elemento System.Enum denominado DaysOfWeek contiene un miembro denominado Tue con un valor entero subyacente de 3, ese miembro se asigna a un valor de base de datos de 3. Asignacin a tipos SQL de texto (CHAR, NCHAR, VARCHAR, NVARCHAR) Al asignar un tipo System.Enum de CLR a un tipo de texto de SQL, el valor de la base de datos SQL se asigna a los nombres de los miembros System.Enum de CLR. Por ejemplo, si un tipoSystem.Enum denominado DaysOfWeek contiene un miembro denominado Tue con un valor entero subyacente de 3, ese miembro se asigna a un valor de base de datos de Tue.

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468

Nota

Cuando los tipos de texto de SQL se asignan a System.Enum de CLR, solo se incluyen los nombres de los mie valores en la columna de SQL asignada a Enum.
Object Relational Designer y la herramienta de lnea de comandos SQLMetal no pueden asignar automticamente un tipo SQL a una clase Enum de CLR. Debe configurar explcitamente esta asignacin personalizando un archivo DBML para que lo usen Object Relational Designer y SQLMetal. Para obtener ms informacin sobre la asignacin de tipos personalizada, vea Asignaciones de tipos SQL-CLR personalizadas (LINQ to SQL). Puesto que una columna SQL de enumeracin tendr el mismo tipo que el resto de las columnas numricas y de texto; estas herramientas no reconocern el intento y la asignacin se realizar de forma predeterminada tal y como se describe en las siguientes secciones Asignacin numrica y Asignacin de texto y XML. Para obtener ms informacin sobre el cdigo generador con el archivo DBML, veaGeneracin de cdigo en LINQ to SQL. El mtodo DataContext.CreateDatabase crea una columna de SQL de tipo numrico para asignar un tipo System.Enum de CLR.

Asignacin numrica
LINQ to SQL permite asignar muchos tipos numricos de CLR y SQL Server. En la tabla siguiente se muestran los tipos de CLR que Object Relational Designer y SQLMetal seleccionan al crear un modelo de objetos o un archivo de asignacin externo de acuerdo con la base de datos.

Tipo de SQL Server


BIT TINYINT INT BIGINT SMALLMONEY MONEY DECIMAL NUMERIC

Asignacin de tipos de CLR predeterminada utilizada por Object R


System.Boolean System.Int16 System.Int32 System.Int64 System.Decimal System.Decimal System.Decimal System.Decimal

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468

REAL/FLOAT(24) FLOAT/FLOAT(53)

System.Single System.Double

En la tabla siguiente se muestran las asignaciones de tipos predeterminadas que el mtodo DataContext.CreateDatabase utiliza para definir qu tipo de columnas de SQL se deben crear para asignarlas a los tipos de CLR definidos en el modelo de objetos o en el archivo de asignacin externo.

Tipo CLR
System.Boolean System.Byte System.Int16 System.Int32 System.Int64 System.SByte System.UInt16 System.UInt32 System.UInt64 System.Decimal System.Single System.Double

Tipo predeterminado de SQL Server utilizado por DataContext.Creat


BIT TINYINT SMALLINT INT BIGINT SMALLINT INT BIGINT DECIMAL(20) DECIMAL(29,4) REAL FLOAT

Hay muchas otras asignaciones de tipos numricos entre las que puede elegir, pero algunas pueden tener como resultado excepciones de desbordamiento o de prdida de datos mientras se trasladan a la base de datos o desde ella. Para obtener ms informacin, vea Matriz de comportamiento de la asignacin de tipos en tiempo de ejecucin.

Tipos Decimal y Money


La precisin predeterminada del tipo DECIMAL de SQL Server (18 dgitos decimales a la derecha y a la izquierda del separador decimal) es menor que la precisin del tipo Decimal de CLR con el que se empareja de forma predeterminada. Esto puede producir una prdida de precisin cuando los datos

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468


se guardan en la base de datos. Sin embargo, puede ocurrir exactamente lo contrario si el tipoDECIMAL de SQL Server se configura con ms de 29 dgitos de precisin. Cuando se ha configurado un tipo DECIMAL de SQL Server con mayor precisin que el tipo System.Decimal de CLR, la prdida de precisin se produce al recuperar los datos de la base de datos. Los tipos MONEY y SMALLMONEY de SQL Server, que tambin estn emparejados con el tipo System.Decimal de CLR de forma predeterminada, tienen mucha menos precisin, por lo que pueden producirse excepciones de desbordamiento o de prdida de datos al guardar los datos en la base de datos.

Asignacin de texto y XML


Tambin hay muchos tipos XML y basados en texto que se pueden asignar con LINQ to SQL. En la tabla siguiente se muestran los tipos de CLR que Object Relational Designer y SQLMetal seleccionan al crear un modelo de objetos o un archivo de asignacin externo de acuerdo con la base de datos.

Tipo de SQL Server


CHAR NCHAR VARCHAR NVARCHAR TEXT NTEXT XML

Asignacin de tipos de CLR predeterminada utilizada por Object R


System.String System.String System.String System.String System.String System.String System.Xml.Linq.XElement

En la tabla siguiente se muestran las asignaciones de tipos predeterminadas que el mtodo DataContext.CreateDatabase utiliza para definir qu tipo de columnas de SQL se deben crear para asignarlas a los tipos de CLR definidos en el modelo de objetos o en el archivo de asignacin externo.

Tipo CLR
System.Char System.String System.Char[]

Tipo predeterminado de SQL Se


NCHAR(1) NVARCHAR(4000) NVARCHAR(4000)

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468

Tipo personalizado que implementa Parse() y ToString()

NVARCHAR(MAX)

Hay muchas otras asignaciones de XML y basadas en texto entre las que puede elegir, pero algunas pueden tener como resultado excepciones de desbordamiento o de prdida de datos mientras se trasladan a o desde la base de datos. Para obtener ms informacin, vea Matriz de comportamiento de la asignacin de tipos en tiempo de ejecucin.

Tipos XML
El tipo de datos XML de SQL Server est disponible a partir de Microsoft SQL Server 2005. Puede asignar el tipo de datos XML de SQL Server a XElement, XDocument o String. Si la columna almacena fragmentos XML que no se pueden leer en XElement, dicha columna debe asignarse a String para evitar errores en tiempo de ejecucin. Entre los fragmentos XML que se deben asignar a String se incluyen los siguientes: Una secuencia de elementos XML Atributos Identificadores pblicos (PI) Comentarios

Aunque puede asignar XElement y XDocument a SQL Server como se muestra en Matriz de comportamiento de la asignacin de tipos en tiempo de ejecucin, el mtodo DataContext.CreateDatabase no dispone de ninguna asignacin predeterminada de tipos de SQL Server para estos tipos.

Tipos personalizados
Si una clase implementa Parse() y ToString(), el objeto se puede asignar a cualquier tipo de texto de SQL (CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT, XML). El objeto se almacena en la base de datos enviando el valor devuelto por ToString() a la columna de base de datos asignada. El objeto se reconstruye invocando a Parse() en la cadena devuelta por la base de datos.

Nota
LINQ to SQL no admite la serializacin mediante System.Xml.Serialization.IXmlSerializable.

Asignacin de fecha y hora


Con LINQ to SQL, se pueden asignar muchos tipos de fecha y hora de SQL Server. En la tabla siguiente se muestran los tipos de CLR que Object Relational Designer y SQLMetal seleccionan al crear un modelo de objetos o un archivo de asignacin externo de acuerdo con la base de datos.

Tipo de SQL Server

Asignacin de tipos de CLR predeterminada utilizada por Object

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468

SMALLDATETIME DATETIME DATETIME2 DATETIMEOFFSET DATE TIME

System.DateTime System.DateTime System.DateTime System.DateTimeOffset System.DateTime System.TimeSpan

En la tabla siguiente se muestran las asignaciones de tipos predeterminadas que el mtodo DataContext.CreateDatabase utiliza para definir qu tipo de columnas de SQL se deben crear para asignarlas a los tipos de CLR definidos en el modelo de objetos o en el archivo de asignacin externo.

Tipo CLR
System.DateTime System.DateTimeOffset System.TimeSpan

Tipo predeterminado de SQL Server utilizado por DataCont


DATETIME DATETIMEOFFSET TIME

Hay muchas otras asignaciones de fecha y hora entre las que puede elegir, pero algunas pueden tener como resultado excepciones de desbordamiento o de prdida de datos mientras se trasladan a o desde la base de datos. Para obtener ms informacin, vea Matriz de comportamiento de la asignacin de tipos en tiempo de ejecucin.

Nota

Los tipos de SQL Server DATETIME2, DATETIMEOFFSET, DATE y TIME estn disponibles a partir de estos tipos nuevos a partir del Service Pack 1 de .NET Framework 3.5.
System.Datetime
El intervalo y la precisin del tipo System.DateTime de CLR son mayores que el intervalo y la precisin del tipo DATETIME de SQL Server, que es la asignacin de tipos predeterminada para el mtodoDataContext.CreateDatabase. Para evitar las excepciones relacionadas con los datos que estn fuera del intervalo de DATETIME, utilice DATETIME2, que est disponible a partir de Microsoft SQL Server 2008. DATETIME2 puede alcanzar la precisin y el intervalo del tipo System.DateTime de CLR.

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468


Las fechas de SQL Server no disponen del concepto de TimeZone, que es una caracterstica totalmente admitida en CLR. Los valores de TimeZone se guardan tal como estn en la base de datos sin conversin de TimeZone, independientemente de la informacin de DateTimeKind original. Cuando los valores DateTime se recuperan de la base de datos, su valor se carga tal cual en DateTime, con un valor DateTimeKind de Unspecified. Para obtener ms informacin acerca de los mtodos de System.DateTime compatibles, vea System.DateTime (mtodos - LINQ to SQL).

System.TimeSpan
Microsoft SQL Server 2008 y .NET Framework 3.5 SP1 permiten asignar el tipo System.TimeSpan de CLR al tipo TIME de SQL Server. Sin embargo, existe una gran diferencia entre el intervalo que admite el tipo System.TimeSpan de CLR y el que admite el tipo TIME de SQL Server. La asignacin de valores menores que 0 horas o mayores que 23:59:59.9999999 horas al tipo TIME de SQL producir excepciones de desbordamiento. Para obtener ms informacin, vea System.TimeSpan (mtodos - LINQ to SQL). En Microsoft SQL Server 2000 y SQL Server 2005, no se pueden asignar campos de base de datos a TimeSpan. Sin embargo, se admiten las operaciones en TimeSpan porque se pueden devolver valoresTimeSpan a partir de la sustraccin de DateTime o se pueden incluir en una expresin como una variable literal o una variable enlazada.

Asignacin binaria
Hay muchos tipos de SQL Server que se pueden asignar al tipo System.Data.Linq.Binary de CLR. En la tabla siguiente se muestran los tipos de SQL Server que provocan que Object Relational Designer y SQLMetal definan un tipo System.Data.Linq.Binary de CLR al crear un modelo de objetos o un archivo de asignacin externo de acuerdo con la base de datos.

Tipo de SQL Server


BINARY(50) VARBINARY(50) VARBINARY(MAX) VARBINARY(MAX) con el atributo FILESTREAM IMAGE TIMESTAMP

Asignacin de tipos de CLR predeterminad


System.Data.Linq.Binary System.Data.Linq.Binary System.Data.Linq.Binary System.Data.Linq.Binary System.Data.Linq.Binary System.Data.Linq.Binary

En la tabla siguiente se muestran las asignaciones de tipos predeterminadas que el mtodo DataContext.CreateDatabase utiliza para definir qu tipo de columnas de SQL se deben

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468


crear para asignarlas a los tipos de CLR definidos en el modelo de objetos o en el archivo de asignacin externo.

Tipo CLR
System.Data.Linq.Binary System.Byte System.Runtime.Serialization.ISerializable

Tipo predeterminado de SQL Server utilizad


VARBINARY(MAX) VARBINARY(MAX) VARBINARY(MAX)

Hay muchas otras asignaciones binarias entre las que puede elegir, pero algunas pueden tener como resultado excepciones de desbordamiento o de prdida de datos mientras se trasladan a o desde la base de datos. Para obtener ms informacin, vea Matriz de comportamiento de la asignacin de tipos en tiempo de ejecucin.

SQL Server FILESTREAM


El atributo FILESTREAM para las columnas VARBINARY(MAX) est disponible a partir de Microsoft SQL Server 2008; se le pueden asignar elementos con LINQ to SQL a partir del Service Pack 1 de .NET Framework 3.5. Aunque puede asignar columnas VARBINARY(MAX) con el atributo FILESTREAM a objetos Binary, el mtodo DataContext.CreateDatabase no puede crear columnas automticamente con el atributoFILESTREAM. Para obtener ms informacin acerca de FILESTREAM, vea Informacin general de FILESTREAM en los Libros en pantalla de SQL Server.

Serializacin binaria
Si una clase implementa la interfaz ISerializable, se puede serializar un objeto en cualquier campo binario de SQL (BINARY, VARBINARY, IMAGE). El objeto se serializa o deserializa de acuerdo con la forma en que se haya implementado la interfaz ISerializable. Para obtener ms informacin, vea Serializacin binaria.

Asignaciones varias
En la tabla siguiente se muestran las asignaciones de tipos predeterminadas para varios tipos que an no se han mencionado. En la tabla siguiente se muestran los tipos de CLR que Object Relational Designer y SQLMetal seleccionan al crear un modelo de objetos o un archivo de asignacin externo de acuerdo con la base de datos.

Tipo de SQL Server


UNIQUEIDENTIFIER

Asignacin de tipos de CLR predeterminada utilizada por Object


System.Guid

Alumno: Arriola Guzmn Luis Rubn. Matrcula: 28085468

SQL_VARIANT

System.Object

En la tabla siguiente se muestran las asignaciones de tipos predeterminadas que el mtodo DataContext.CreateDatabase utiliza para definir qu tipo de columnas de SQL se deben crear para asignarlas a los tipos de CLR definidos en el modelo de objetos o en el archivo de asignacin externo.

Tipo CLR
System.Guid System.Object

Tipo predeterminado de SQL Server utilizado por DataContext.CreateD


UNIQUEIDENTIFIER SQL_VARIANT

LINQ to SQL no admite ninguna otra asignacin de tipos para estos tipos varios.

S-ar putea să vă placă și