2011-10-02 65 views
2

我的SQL查詢未找到以例如č開頭的城市,但找到的城市名稱中包含č,但以普通英文字母。SQL查詢未找到以č,ć,š,ž等開頭的城市

數據庫中的城市列是nvarchar類型。

這個問題的解決方案是什麼?

我正在使用SQLite數據庫。

cmdSQLite = new SQLiteCommand("SELECT RegistrationNumber, DocumentName, 
    Performer, BuiltYear, ReferatCardNumber , City, Municipalities , StreetName 
    FROM Geotest WHERE LOWER (City) = @City", connectionSQLite); 

    SQLiteParameter parameterCity = new SQLiteParameter(); 
    parameterCity.Value = comboBoxCitySearch.Text.ToLower(); 
    parameterCity.ParameterName = "@City"; 
    cmdSQLite.Parameters.Add(parameterCity); 
+0

什麼是您的查詢? – Joey

+0

一個城市的第一個字母是大寫。也許在你的查詢中只使用小寫字母? – Dialecticus

+0

我首先把城市放到小寫字母,這不是問題。 –

回答

0

這裏是溶液:

parameterCity.Value = comboBoxCitySearch.Text; 

不使用C#函數comboBoxCitySearch.Text.ToLower();僅在SQL中使用:

WHERE LOWER(City) = LOWER(@City) 
1

我想你的問題可能與SQL Server中的unicode字符串有關。這可能有助於

http://support.microsoft.com/kb/239530

當使用Unicode字符串常量在SQL Server打交道,你必須 位於所有Unicode字符串以大寫字母N,如 SQL Server聯機叢書主題文件「使用Unicode數據」。 「N」前綴 代表SQL-92標準中的國家語言,並且必須爲 大寫。如果您沒有爲Unicode字符串常量添加前綴N,那麼SQL 服務器將在使用該字符串之前將其轉換爲當前的 數據庫的非Unicode代碼頁。

更新:我的錯誤,我沒有正確地閱讀這個問題,我想我們正在談論SQL Server。閱讀SQL精簡版文檔時,SQLite的http://www.sqlite.org/faq.html#q18

的默認配置僅支持不區分大小寫的ASCII字符 比較。原因在於,在完成Unicode大小寫不​​敏感的比較和大小寫轉換時, 需要的表和邏輯幾乎將SQLite庫的大小加倍。 SQLite開發者之所以認爲 需要完整Unicode支持的應用程序可能已經具備了必要的 表和函數,所以SQLite不應該佔用空間來重複這個功能 。

+4

OP是詢問SQLite,而不是SQL Server。 –

+0

謝謝你指出,我的錯誤。 – alykhalid

相關問題