Типы данных text и nvarchar несовместимы в операторе равенства - PullRequest
8 голосов
/ 28 апреля 2010

это мой код

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 (не идентификатор)

Я предполагал, что это должно сработать, но оно выдает Типы данных text и nvarchar несовместимы в операторе равных. error и ни (pr => pr.Product1.Equals(id)); не работает

ошибка ясна, и я спрашиваю, как мне сделать, чтобы она работала таким образом?

спасибо

Ответы [ 2 ]

26 голосов
/ 28 апреля 2010

TEXT столбцы в SQL Server считаются данными больших объектов и, следовательно, не индексируются и не могут быть найдены. Они также устарели. Так что, на самом деле, проблема в вашей базе данных, а не в вашем приложении.

Если вы измените тип столбца на varchar(max), вы можете хранить такое же количество символьных данных, но не должно иметь этой проблемы. Затем обновите свой объект Linq to SQL, и вы больше не получите эту конкретную ошибку.

Сказав, что ... столбец с именем ID не должен быть TEXT или varchar(max), это должен быть целочисленный идентификатор с автоматическим приращением или GUID (uniqueidentifier) , так что вы можете пересмотреть дизайн вашей БД. Но если у вас есть веские основания для того, чтобы идентификаторы были строковыми значениями произвольного размера, указанное выше изменение позволит вам выполнить фильтрацию по столбцу.

0 голосов
/ 26 августа 2017

Эта проблема может возникнуть, затем используйте:

Exemple

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...