2012-06-29 96 views
4

我使用SQL Server 2008作爲我的數據庫引擎在VS2010,C#ASP.NET web應用程序中。我的項目是波斯語(波斯語),所以我使用nvarcharntext作爲我的數據類型。SQL Server在nvarchar&ntext中的搜索

我使用以下查詢從我的數據庫中查找行,但沒有任何返回,而我有一個指定關鍵字的行。當然,我的關鍵字是波斯語(unicode)。

這裏怎麼回事?是因爲使用了波斯語?如何搜索包含Unicode字符的nvarcharntext列?

myCommand = new SqlCommand("select * from tblArticle where name LIKE '%" + txtSearch.Text + "%'", SQLConnection); 
+2

'NTEXT'已棄用 - **請勿**將其用於新項目!使用'NVARCHAR(MAX)'代替 - 這使搜索變得更容易! –

+2

另請參見:您應該使用**參數化查詢**而不是將SQL命令連接在一起!這種方法非常容易受到** SQL注入攻擊** - 不要使用它。 –

+0

感謝marc,但是這個搜索是在一個nvarchar字段中完成的,我沒有得到任何結果!雖然我可以很容易地看到數據庫中的確切值,但這裏發生了什麼? –

回答

10

您應該使用N'前綴,以表明你正在尋找一個Unicode字符串:

SELECT * FROM dbo.tblArticle WHERE name LIKE N'%......%' 

否則,你將你的搜索字符串返回到非Unicode,然後搜索....

+1

感謝marc,它解決了我的問題!你已經幫了我好幾次了。再次感謝 –

0

我不熟悉C#ASP.NET,但使用nvarcharntext不應該在查詢類型的任何差異。我徘徊你只是將您的查詢命令分配給一個變量,而不是執行它.. 你應該做一些像myCommand.execute()

+0

是的,我做到了!但我沒有得到結果 –

+1

你有沒有試過在SQL Server查詢編輯器中的查詢? – mithilatw

2

您必須使用COLLATE Latin1_General_BIN2才能得到結果。阿姆哈拉語爲埃塞俄比亞人工作。

Select * From YourTableName where ColNameYouSearch LIKE N'%YourSerchCriteria%' COLLATE Latin1_General_BIN2"