Kullandığım projelerde ACCESS yerine SQLite kullanmayı uzun zamandır
düşünüyordum. Fakat SQLite altında sorgu yaptığımda harfleri Türkçe
sıralayamıyordu.
Bu sorunu çözmek için önce SQLite ve ICU
bileşenlerini kendim derlemeyi denedim. Fakat C bilgim olmadığı için bu
konuda başarılı olamadım.
Ardından yılmadım ve denemelerime devam ettim.
En sonunda bu adresteki kodu kullanarak sorunumu çözebildim.
Öncelikle Bir class oluşturuyoruz ve bu Class başlığına şı satırlaır ekliyoruz:
using System.Data.SQLite;
using System.Globalization;
Ardından Class ın kod alanına bu satırları ekliyoruz:
namespace SQLiteUTF8CIComparison
{
///
/// This function adds case-insensitive sort feature to SQLite engine
/// To initialize, use SQLiteFunction.RegisterFunction() before all connections are open
///
[SQLiteFunction(FuncType = FunctionType.Collation, Name = "UTF8CI")]
public class SQLiteCaseInsensitiveCollation : SQLiteFunction
{
///
/// CultureInfo for comparing strings in case insensitive manner
///
private static readonly CultureInfo _cultureInfo = CultureInfo.CreateSpecificCulture("tr-TR");
///
/// Does case-insensitive comparison using _cultureInfo
///
/// Left string
/// Right string
/// The result of a comparison
public override int Compare(string x, string y)
{
return string.Compare(x, y, _cultureInfo, CompareOptions.IgnoreCase);
}
}
}
Şimdi bu fonksiyonu kullanabilmemiz için programın başlangıcına şu satırları ekliyoruz:
Header kısmına :
using System.Data.SQLite;
using SQLiteUTF8CIComparison;
Form Load Event'ına:
SQLiteFunction.RegisterFunction(typeof(SQLiteCaseInsensitiveCollation));
Eğer tabloları herhangi bir SQLite Yönetim programıyla oluşturduysanız Türkçe sıralama yine çalışmayacaktır.
Tabloları
kendimiz program içinde oluşturmalıyız. SQL konusunda iyi değilseniz
SQLite yönetim programlarını herhangi biriyle oluşturduğunuz tabloyu
EXPORT ederek SQL kodlarını elde edebilirsiniz.
Burada sıralama yapacağınız (ORDER BY) FIELD'ların oluşturma koduna COLLATE UTF8CI kelimelerini ekliyoruz:
CREATE TABLE `tablom` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`adi` TEXT NULL COLLATE UTF8CI,
`soyadi` TEXT)
Bundan sonra yapacağınız insert ve select sorgularında sıralama Türkçe oalcaktır.
Eğer
No such collation: UTF8CI
şeklinde hata alırsanız select sorgusunun sonuna COLLATE BINARY kelimelerini ekleyin :
select * from tablom order by adi COLLATE BINARY
İyi kodlamalar.
Kaynak : http://www.egeonline.com/index.php/yazilimgelistirme/c/179-sqlite-tuerkce-harf-sralamas-sqlite-turkish-collation.html
Bu Güzel Makkale için Teşekkürler İlyas Bey
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
SQL SERVER, SQLite
sqlite türkçe harf sıralaması, sqlite turkish collation