这是我的代码
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));
都不起作用
错误是明确的,我问我该怎样做才能让它以这种方式工作?
感谢
答案 0 :(得分:26)
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;