数据类型text和nvarchar在等于运算符中不兼容

时间:2010-04-28 03:33:34

标签: c# asp.net-mvc linq-to-sql

这是我的代码

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>

这是我用来从sql数据库列出一些产品的东西,每个产品都有一个指向详细信息页面的链接,以显示有关它的更多信息

我试图将产品标签放在该链接中,以便显示 www.mysite.com \ products \ battery (不是id)

我认为这应该可行,但它会抛出数据类型text和nvarchar在等于运算符时不兼容。错误和 (pr => pr.Product1.Equals(id));都不起作用

错误是明确的,我问我该怎样做才能让它以这种方式工作?

感谢

2 个答案:

答案 0 :(得分:26)

SQL Server中的

TEXT列被视为大对象数据,因此不可索引/可搜索。他们也被弃用了。实际上,问题出在您的数据库中,而不是在您的应用程序中。

如果将列类型更改为varchar(max),则可以存储相同数量的字符数据,但不应出现此问题。然后,将Linq更新为SQL实体,您将不再收到此特定错误。

说了......名为ID的列不应该是TEXT varchar(max),它应该是自动增量整数ID或GUID(uniqueidentifier),因此您可能需要重新访问数据库设计。但假设您有充分理由将ID作为任意大小的字符串值,则上述更改将允许您对列进行过滤。

答案 1 :(得分:0)

然后可以发生此问题:

<强>为例

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

这是不兼容的:

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

更改:

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