2009-05-15 25 views
11

Khi cố gắng cập nhật đối tượng LINQ tôi nhận được lỗi sau.LINQ to SQL lỗi SQL không so sánh NText, Văn bản, Xml hoặc Hình ảnh?

"Máy chủ SQL không xử lý so sánh các loại dữ liệu NText, Văn bản, Xml hoặc Hình ảnh".

Có một trường trong cơ sở dữ liệu là trường văn bản vì nó sẽ giữ một chuỗi có thể lớn tới 32kb.

Tôi có nên thay đổi loại dữ liệu hoặc có công việc xung quanh trong LINQ tôi có thể sử dụng không?

EDIT

Tôi có hỗ trợ SQL 2000 là lý do tại sao đó là trường TEXT.

Trả lời

7

Thay đổi nó thành VARCHAR (tối đa) - nó sẽ làm cho cuộc sống dễ dàng hơn nhiều.


EDIT

Full lập chỉ mục văn bản có thể giúp bạn ở đây, không chắc chắn nếu SQL 2000 sẽ cho phép bạn để sau đó "search" trên cột văn bản của bạn

+0

Còn về SQL 2000 thì tôi phải hỗ trợ gì? –

+0

Còn nếu tôi không thể thay đổi loại cột? Tôi vẫn nhận được ngoại lệ này mặc dù UpdateCheck = UpdateCheck.Never cho cột được đề cập (gõ NText). Bất kỳ giải pháp nào khác? Nó chỉ xảy ra khi cập nhật dữ liệu - nếu trường là null trước khi cập nhật thì mã thực thi tốt. Cảm ơn. David. –

+0

Chỉ mục văn bản đầy đủ chỉ cho phép sử dụng các vị từ đầy đủ khác nhau, 'CONTAINS', v.v. Không thể thực hiện trong MSSQL 2k để so sánh các kiểu cột này với' = ','! = ', V.v. – Donnie

8

bạn luôn có thể sử dụng ToString() trên chuỗi trong câu hỏi đó sẽ buộc so sánh phía khách hàng.

+0

Đây là phương pháp đúng .... – RameshVel

+0

Trong trường hợp của tôi, tôi đã có một trường kiểu dữ liệu XML và có thể giải quyết lỗi bằng cách thay đổi thuộc tính updateCheck trên cột trong mô hình của tôi .. [Cột (Storage = "_CustomAttributes", AutoSync = AutoSync.OnInsert, DbType = "xml", UpdateCheck = UpdateCheck.Never)] – ZimSystem

1

Bạn có thể thay đổi Kiểm tra cập nhật thành "Không bao giờ" theo cách thủ công trong .dbml.

+1

Hãy cố gắng bao gồm các bit liên quan và cụ thể. – NeverHopeless

1

Hoặc bạn có thể thiết lập UpdateCheck trong mã:

 [Column(Name = "SomeXml", Storage = "_someXml", CanBeNull = true, UpdateCheck = UpdateCheck.Never)] 
    public System.Xml.Linq.XDocument SomeXml { get { return _someXml; } set { _someXml = value; } } 
0

Bạn phải thay đổi ALL các lĩnh vực bảng để NVARCHAR (MAX) - Ngay cả những người mà bạn không cập nhật.