2010-04-28 60 views
5

este es mi códigoEl texto y los tipos de datos nvarchar son incompatibles en el operador igual a

ProductController.cs

public ActionResult Details(string id) 
{ 
    product productx = productDB.products.Single(pr => pr.Product1 == id); 
    return View(productx); 


} 

Details.aspx

<td> 
     <%-- : Html.ActionLink("Edit", "Edit", new { id=item.Id }) % --> 
     <%: Html.ActionLink("Details", "Details", new { id = item.Product1 })%> 
    </td> 

esto es Lo que estoy usando para enumerar algunos productos de una base de datos sql, cada producto tiene un enlace a una página de Detalles para mostrar más inf ormations al respecto

lo que estoy tratando es sólo poner la etiqueta del producto en el que enlazan con deje que se muestran algo así como www.mysite.com \ productos \ batería (no el id)

he imaginado esto debería funcionar, pero lanza un Los tipos de datos text y nvarchar son incompatibles en el operador equal. error y ni (pr => pr.Product1.Equals(id)); funciona

el error es claro y me pregunto cómo debo hacer para que funcione de esta manera?

gracias

Respuesta

22

TEXT columnas en SQL Server se consideran los datos de objetos grandes y por lo tanto no son indexables/búsquedas. También están en desuso. Entonces, en realidad, el problema está en su base de datos, no en su aplicación.

Si cambia el tipo de columna a varchar(max), puede almacenar la misma cantidad de datos de caracteres pero no debería tener este problema. Luego, actualice su entidad Linq a SQL, y ya no obtendrá este error en particular.

Una vez dicho esto ... una columna denominada ID no debe ser TEXTovarchar(max), debe ser un número entero de identificación de incremento automático o un GUID (uniqueidentifier), por lo que es posible que desee revisar su diseño DB. Pero suponiendo que tiene buenas razones para que los ID sean valores de cadena de tamaño arbitrario, el cambio anterior le permitirá filtrar en la columna.

+0

¡Gracias! Funciona estableciéndolo en varchar (max), otra pequeña pregunta: ¿qué hay de la forma en que devuelvo el productx, es una buena práctica? – Hassen

+0

@metro: la forma en que devuelve el 'Producto' está bien. Pero si hablamos de las mejores prácticas, * realmente * debería considerar el uso de un tipo de datos diferente para la ID; te encontrarás con * major * problemas de rendimiento con tipos de caracteres grandes. – Aaronaught

0

Este problema puede ocurrir a continuación, utilizar:

Exemple

string sql = "Select * from TB_USER where Name = @Name"; 
SqlCommand cmd = new SqlCommand(sql); 

Esto es incompatible:

cmd.Parameters.Add("@Nome", SqlDbType.Text).Value = nome; 

Cambio para:

cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = nome; 
Cuestiones relacionadas