使用ADO.NET進行數據庫操作時,遇到數據類型為nText的字段,插入和更新字段信息,或者以該字段為查詢條件時,如果你直接使用一個C#里面的String數據類型對其賦值,那“恭喜你”,你將被毫不留情的得到如下結果:
“數據類型 ntext 和 varchar 在 equal to 運算符中不兼容的錯誤信息”
ntext和nvarchar,這兩個數據類型在數據庫中是完全不同的,所以無法在他們之間進行比較操作,尤其是ntext,很多操作都不能做,就算是兩個ntext類型,也沒有辦法進行比較操作。然而要對nText類型的字段賦予nvarchar類型的值,或者進行一個條件是ntext字段與nvarchar字段進行比較的sql語句的查詢,當然無法進行。
而C#中卻只有使用String類型來表示nText,nVarchar,Text,Varchar等類型的數據,所以從C#方面來解決這個問題,顯然是行不通的,那就只有從T-SQL方面入手了。方法有兩個:
1.直接改數據庫字段類型,這種方式治標不治本,不推薦使用!因為既然使用了nText和Text類型,說明該字段的數據長度比較大,不好預估,當然SQLserver2005以上 的nvarchar(max) 可以存放2G的內容,足夠用來替換nText類型了。
2.使用T-SQL函數 cast 或者 convert 轉換nText字段的數據類型:
(1)更新語句:
cast函數: update tb_test set cast([A] as nvarchar(max))='xxx'
convert函數:update tb_test set convert(nvarchar(max),[A])='xxx'
(2)插入語句:
cast函數: insert into tb_test([A]) where cast(’xxx’ as nvarchar(max))
convert函數:insert into tb_test([A]) where convert(nvarchar(max),’xxx’)
(3)查詢語句:
cast函數: select * from tb_test where cast([A] as nvarchar(max))=’xxx’
convert函數:select * from tb_test where convert(nvarchar(255),test)=’xxx’
