LINQ to SQL Update (C #) - PullRequest
       40

LINQ to SQL Update (C #)

4 голосов
/ 02 октября 2009

Это скрипт моей таблицы:

CREATE TABLE ClientTypes
(
    type_id int PRIMARY KEY IDENTITY,
    type_name varchar(250) not null,
    type_applications_list text,
    dtIntro datetime DEFAULT(getdate())
)

И в ASP.net я пытаюсь сделать это:

protected void btnActualizar_Click(object sender, EventArgs e)
    {
        var aplicacao = (from apl in dc.ClientTypes
                         where apl.type_id == tipoCliente
                         select apl).Single();

        aplicacao.type_name = txtAplicações.Text.ToString();

        dc.SubmitChanges();
    }

Однако, когда он работает, он вылетает и говорит:

"Типы данных text и varchar несовместимы в операторе равенства."

Я действительно не хочу менять тип данных SQL на varchar, я бы хотел, чтобы он оставался в тексте. Я провел несколько тестов с другими значениями типов данных, такими как int ... и все прошло хорошо.

Я действительно не понимаю этого, я использую элемент управления, который возвращает строку.

Спасибо заранее

Кто-нибудь может мне помочь? Спасибо заранее.

Ответы [ 4 ]

6 голосов
/ 02 октября 2009

MSDN утверждает, что вам не следует использовать текстовый тип данных , так как он будет удален в будущих версиях SQL Server. Тип текстовых данных нельзя сравнивать или сортировать, поэтому, если вы хотите сравнить в своем запросе LINQ, вам придется изменить тип.

1 голос
/ 02 октября 2009

Это всего лишь предположение, но мне интересно, сталкивались ли вы с проблемой оптимистического параллелизма при проверке свойства type_applications_list. В вашем файле DBML проверьте, имеет ли свойство type_applications_list значение UpdateCheck, кроме «Никогда»; Если это так, попробуйте изменить его на «Никогда».

Вот объяснение оптимистического параллелизма Linq to SQL

0 голосов
/ 02 октября 2009

Интересно, автоматически ли добавляется оператор update, сгенерированный LINQ, в строке для type_applications_list = "Все, что равно"? Если это так, это может быть причиной проблемы.

Попытаетесь ли вы расширить свое утверждение строкой:

aplicacao.type_applications_list = 
    aplicacao.type_applications_list.Substring(0, 2000);

Или другое большое число в подстроке. Просто чтобы посмотреть, работает ли тогда.

В качестве альтернативы, если вы используете SQL2005 или выше, вы можете попробовать преобразовать тип данных TEXT в Varchar (MAX). Я знаю, что вы бы предпочли этого не делать, поэтому сначала попробуйте мою первую идею.

0 голосов
/ 02 октября 2009

Попробуйте это изменение:

aplicacao.type_name = txtAplicações.Text;

Я полагаю, вы получаете исключение на этой линии? Кажется, что запрос Linq - это нормально, при условии, что tipoCliente является int (даже если бы его не было, вы бы получили другую ошибку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...