簡體   English   中英

LINQ to SQL更新(C#)

[英]LINQ to SQL Update (C#)

這是我的表格的腳本:

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 ......一切都很順利。

我真的不明白這一點,我使用一個返回String的控件。

Thx提前

誰能幫我? Thx提前。

MSDN聲明您不應使用文本數據類型,因為它將在SQL Server的未來版本中刪除。 無法比較或排序文本數據類型,因此如果要在LINQ查詢中進行比較,則必須更改類型。

這只是一個猜測,但我想知道你是否遇到了對type_applications_list屬性進行樂觀並發檢查的問題。 在您的DBML文件中,檢查type_applications_list屬性是否將UpdateCheck設置為“Never”之外的內容; 如果是這樣,請嘗試將其更改為“從不”。

以下是對Linq to SQL Optimistic Concurrency的解釋

試試這個改變:

aplicacao.type_name = txtAplicações.Text;

我假設你在這條線上得到例外? 似乎Linq查詢很好,前提是tipoCliente是一個int(即使它不是你會得到一個不同的錯誤)。

我想知道LINQ生成的更新語句是否會為你自動添加一行type_applications_list =“Whatever it equals”。 如果是這樣,可能會導致問題。

你會嘗試用這句話擴展你的陳述:

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

或者子串中的其他一些大數字。 只是為了看它是否有效。

或者,如果您使用的是SQL2005或更高版本,則可以嘗試將TEXT數據類型轉換為Varchar(MAX)。 我知道你不願意,所以請先嘗試我的第一個想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM