2011-10-02 29 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

相关问题