2009-05-15 17 views
11

Al intentar hacer una actualización para un objeto Linq recibo el siguiente error.Error de SQL a SQL ¿SQL no compara NText, texto, Xml o imagen?

"SQL Server no maneja la comparación de los tipos de datos NText, Texto, Xml o Imagen."

Hay un campo en la base de datos que es un campo de texto porque va a contener una cadena que podría ser de hasta 32 kb.

¿Debo cambiar el tipo de datos o hay un trabajo en Linq que podría utilizar?

EDITAR

tengo soporte de SQL 2000, que es por eso que es un campo de texto.

Respuesta

7

Cambie a un VARCHAR (max) - le hará la vida mucho más fácil.


EDITAR

indexación de texto completo puede ayudar aquí, no estoy seguro si SQL 2000 le permitiría luego "buscar" en su columna de texto

+0

¿Qué ocurre con SQL 2000 que tengo que admitir? –

+0

¿Qué tal si no puedo cambiar el tipo de la columna? Todavía obtengo esta excepción a pesar de que UpdateCheck = UpdateCheck.Never para la columna en cuestión (escriba NText). ¿Alguna otra solución? Solo ocurre cuando se actualizan los datos: si el campo fue nulo antes de la actualización, el código se ejecuta correctamente. Gracias. David. –

+0

La indexación de texto completo solo permite el uso de varios predicados de texto completo, 'CONTAINS', etc. No es posible en MSSQL 2k comparar estos tipos de columnas con' = ','! = ', Etc. – Donnie

8

siempre se puede utilizar ToString() en el cadena en cuestión que forzará la comparación del lado del cliente.

+0

Este es el enfoque correcto .... – RameshVel

+0

En mi caso, tenía un campo de tipo de datos XML y pude resolver el error cambiando el atributo updateCheck en la columna de mi modelo. [Columna (Storage = "_CustomAttributes", AutoSync = AutoSync.OnInsert, DbType = "xml", UpdateCheck = UpdateCheck.Never)] – ZimSystem

1

Puede cambiar manualmente la comprobación de actualización a "Nunca" en el archivo .dbml.

+1

Intente incluir los bits relevantes y sea específico. – NeverHopeless

1

O usted podría fijar UpdateCheck en código:

 [Column(Name = "SomeXml", Storage = "_someXml", CanBeNull = true, UpdateCheck = UpdateCheck.Never)] 
    public System.Xml.Linq.XDocument SomeXml { get { return _someXml; } set { _someXml = value; } } 
0

usted tiene que cambiar TODAS los campos de la tabla a NVARCHAR (MAX) - Incluso los que no se actualizan.

Cuestiones relacionadas