Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

SQLite UWP işlemlerinde Türkçe karakter ve tablo oluşturma, veri ekleme sorunu

Konu, 'Veritabanları' kısmında siirsen tarafından paylaşıldı.

  1. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Tablo oluşturmak için çizginin altındaki kodları kullanıyorum . UWP için bir program yapıyorum.
    Veritabanında çok tablo ile çalışmak istiyorum ancak başaramadım. Program çalışıyor, Türkçe karakter sorunları yaşadığım için SQLite komutlarını değiştirmek istiyorum ( bu linkteki kodlar bu konuda bana yardımcı olacak bütünü ile çalışma prensibini anladım gibi), bu Türkçe karakterler için çözüm oldu.
    Benim sorunum :
    1) TABLOOKUL tablosunu başka adlarda kayıt edilebilsin, işlem yapılabilsin [ cnn.CreateTable<TABLOOKUL>(); ] ancak veritabanında program class'ında yer alan tablo yapısından kaynaklanan nedenle sadece TABLOOKUL tablosu oluşuyor. Bu nedenle bu koda cnn.CreateTable<TABLOOKUL>(); ne eklemeliyim.
    2) cnn.Query kullanarak programın Class ında yer alan TABLOOKUL tablo yapısı ile veritabanında yer alan farklı isimlerde ama aynı yapıda başka tablolarla bağlantı kurmanın yolu nedir? Özellikle tablo oluşturma ve veri kaydı yaparken bu önemli zira başka yöntemlerle Türkçe karakter sorunu oluşuyor
    3) Direkt alttaki kodlar gibi kodlarla ( cnn.Execute(vSQL); ) diyerek veritabanı işlemlerimi yapıyordum. Veritabanı oluşturmak, tablo oluşturmak ve çeşitli sorgular için doğrudan ( cnn.Execute(vSQL); ) komutu yeterli idi. Ancak fark ettim ki bu yöntem ile yapılan her işlemde Türkçe karakter sorunları oluşuyordu. Acaba bu sorun INSERT INTO da yer alan tırnak işaretlerinden mi kaynaklanıyor anlamadım, tırnaksız kayıt yaptıramadım.
    Okuduğunuz için teşekkür ederim.

    -------------------------
    Bu kodlarla işlem yapıldığında tabloda Türkçe karakter sorunları oluşuyor:
    Kod:
     
    cnn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), vtTamYol);
    vSQL = "CREATE TABLE OKULLARTABLOSU (okulYILI TEXT, okulADI TEXT, okulTabloADI TEXT);";
    cnn.Execute(vSQL);
    
    cnn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), vtYol);
                vSQL = "INSERT INTO OKULLARTABLOSU (okulYILI, okulADI, okulTabloADI) VALUES('" + yılı + "', '" + okulu + "', '" + vTabloAdı + "')";
                cnn.Execute(vSQL);
    
    -------------------------------------------------------------------
    Nasıl farklı adlarda tablo oluşturacak şekilde
    CreateTable<TABLOOKUL> bu kodu kullanabilirim ve Insert(TABLOOKUL objContact, string vtyolu)
    kodlarına farklı tablo adlarını nasıl bağlayabilirim?
    Kod:
               
     using (var cnn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), vtTamYol))
                {
                    cnn.CreateTable<TABLOOKUL>();
                    cnn.CreateTable<OKULLARTABLOSU>();
                   
                }
    
            public void Insert(TABLOOKUL objContact, string vtyolu)
            {
                using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), vtyolu))
                {
                    conn.RunInTransaction(() =>
                    {
                        conn.Insert(objContact);
                    });
                }
            }
    
        }
    
    Tablo yapıları:
    Kod:
        
    public class OKULLARTABLOSU
        {
            [SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
            public int okulId { get; set; }
            public string okulYILI { get; set; }
            public string okulADI { get; set; }
            public string okulTabloADI { get; set; }
    
    
            public OKULLARTABLOSU()
            {
                //empty constructor
            }
            public OKULLARTABLOSU(string okul_YILI, string okul_ADI, string okulTablo_ADI)
            {
                okulYILI = okul_YILI;
                okulADI = okul_ADI;
                okulTabloADI = okulTablo_ADI;
            }
    
        }
        public class TABLOOKUL
        {
    
    
    
            [SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
            public int vId { get; set; }
            public string vSINIFI { get; set; }
            public string vNUMARASI { get; set; }
            public string vADISOYADI { get; set; }
    
            public TABLOOKUL()
            {
                //empty constructor
            }
            public TABLOOKUL(string vvSINIFI, string vvNUMARASI, string vvADISOYADI)
            {
    
                vSINIFI = vvSINIFI;
                vNUMARASI = vvNUMARASI;
                vADISOYADI = vvADISOYADI;
               
            }
    
        }
    
     
  2. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Kodun bu şekilde yazımı ile türkçe karakter sorunu ortadan kalkıyor.
    Kod:
    var s = cnn.Insert(new OKULLARTABLOSU() { okulYILI = yılı, okulADI = okulu, okulTabloADI = vTabloAdı });
    
    Bu kodla farklı tabloya veri ekleme yapmak mümkün ancak bunun için INSERT INTO dan sonra tablo adını değiştirmek gerekiyor , ben DENEME ismini verdim.
    Kod:
    var cnnquery = cnn.Query<OKULLARTABLOSU>("INSERT INTO DENEME (okulYILI, okulADI, okulTabloADI) VALUES('" + yılı + "', '" + okulu + "', '" + vTabloAdı + "')");
    Bir yukarıdaki kod ile Türkçe karakter sorunlu bir şekilde veri eklense bile aşağıdaki kod : syntax error hatası veriyor. Bu şekilde veri ekleyebilsem SORUN ÇÖZÜLECEK AMA.... kaç gündür uğraşıyorum olmuyor, takılı kaldım.
    Kod:
     
    var cnnquery = cnn.Query<TABLOOKUL>($"INSERT INTO {vTabloAdı} (vSINIFI, vNUMARASI, vADISOYADI) VALUES('{val[0].ToString()}', '{val[1].ToString()}', '{val[2].ToString()}'");
    
     
  3. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Bu sayfada projenin ilgili kısmını ekledim. Link Bu
    UYGULA.cs dosyasında YENİ_VT_OLUŞTUR kısmını aşağıdaki kodlarla değiştirince farklı bir tablo yaratıyor, listeyi veritabanına ekliyor ama şu gibi hatalar ile: ��RETMEN�N ADISOYADI
    Türkçe karakterlerde sorun çıkartıyor. Ayrıca Türkçe karakterlerde sıralama hatası da var
    Kod:
            public async void YENİ_VT_OLUŞTUR()
            {
                try
                {
                        if (File.Exists(MainPage.VT_PATH))
                        {
                            SQLite.Net.SQLiteConnection CNNVT = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH);
                            CNNVT.Close();
                            GC.Collect();
                            File.Delete(MainPage.VT_PATH);
                        }
                        //NOT BURAYA YENİ VT OLUŞTURMA KODU YAZ
                        using (var cnn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH)) 
                        {
                        var connquery2 = cnn.Query<TABLOOKUL>("CREATE TABLE FARKLITABLO (vID integer NOT NULL PRIMARY KEY AUTOINCREMENT, vSINIFI TEXT, vNUMARASI integer, vADISOYADI TEXT, vOKULU TEXT, vYILI TEXT, vOGRETMENI TEXT )");
                    }
                    FileStream fs = new FileStream(MainPage.VT_TXT_PATH, FileMode.Open, FileAccess.Read);
                        StreamReader sRead = new StreamReader(fs, Encoding.UTF8);
                        while (!sRead.EndOfStream)
                        {
                            var veri1 = await sRead.ReadLineAsync();
                            if (veri1 != "")
                            {
                                //TXT DOSYASINDAKİ SATIRLARI _ KARAKTERİNDEN BÖL: SINIF, NO, AD SOYAD, OKUL ADI, YIL, ÖĞRETMEN ADI
                                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("_");
                                string[] sütun = regex.Split(veri1.Trim());
                            SQLite.Net.SQLiteConnection cnn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH);
                            string vSQL = "INSERT INTO FARKLITABLO (vSINIFI, vNUMARASI, vADISOYADI, vOKULU, vYILI, vOGRETMENI) VALUES('" + sütun[0] + "', '" + int.Parse(sütun[1]) + "', '" + sütun[2] + "', '" + sütun[3] + "', '" + sütun[4] + "', '" + sütun[5] + "')";
                            cnn.Execute(vSQL);
                        }
                        }
                        MessageDialog x = new MessageDialog("Yeni veritabanı oluşturuldu!", "UYARI");
                        await x.ShowAsync();
                }
                catch
                {
                }
            }
    
     
  4. AspDev

    AspDev Üye

    Kayıt:
    18 Ocak 2017
    Mesajlar:
    36
    Beğenilen Mesajlar:
    12
    Şehir:
    Sivas
    PHP:
    veri2.Params.Values['DriverID'] := 'SQLite';
    veri2.Params.Values['CharacterSet'] := 'utf8';
    Türkçe karakter problemi ile karşılaşan birilerine çözüm olmuş bunları bir değerlendir istersen belki çözüm olabilir.
     
    siirsen bunu beğendi.
  5. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Çözüm olacak gibi değil.
    Bu sayfada projenin ilgili kısmını ekledim. Link Bu
    Bu bir UWP projesi
     
  6. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    References=>NuGet'ten SQLite.Net.Async-PCL'yi ekledim.
    YENİ_VT_OLUŞTUR ile YENİ_VT3_OLUŞTUR kısımlarını değiştirdim. Fotoğraftaki sonuçları elde ettim. Kodları şuradan alıntıladım.
    Şimdi buradan hareketle TABLOOKUL.cs yapısını kullanarak farklı tablolar elde edilebilir mi?
    Farklı tablolardaki veriler TABLOOKUL.cs yapısına çekilir mi? Türkçe karakterlerle arama sorunu hala mevcut. Verileri çektiğim kodlarda mı bir sorun var acaba?
    SQLiteAramaSiralamaSorunu.rar : Download link
    Kod:
     
           public async void YENİ_VT3_OLUŞTUR()
            {
                SQLiteConnectionWithLock Connection = new SQLiteConnectionWithLock(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), new SQLiteConnectionString(MainPage.VT_PATH, true));
    
                var Database = new SQLite.Net.Async.SQLiteAsyncConnection(() => Connection);
                await Database.ExecuteAsync("PRAGMA encoding='UTF-8'");
    
                await Database.DropTableAsync<TABLOOKUL>();
                await Database.CreateTableAsync<TABLOOKUL>();
    
                // 1: works fine
                await Database.InsertOrReplaceAsync(new TABLOOKUL()
                {
                    vADISOYADI = "D1: A ĞÜİŞÇÖ"
                   
                });
    
                // 2: breaks encoding
                await Database.ExecuteAsync("INSERT OR REPLACE INTO TABLOOKUL(vADISOYADI) VALUES ('HATALI: B ĞÜİŞÇÖ')");
    
                // 3: works fine
                await Database.ExecuteAsync(
                  "INSERT OR REPLACE INTO TABLOOKUL(vSINIFI, vADISOYADI) VALUES (@vSINIFI, @vADISOYADI)", "9A", "D3: A ĞÜİŞÇÖ");
    
            }
     

    Ekli Dosyalar:

    • D.jpg
      D.jpg
      Boyut:
      70.8 KB
      Okunma:
      1
  7. AspDev

    AspDev Üye

    Kayıt:
    18 Ocak 2017
    Mesajlar:
    36
    Beğenilen Mesajlar:
    12
    Şehir:
    Sivas
    PHP:
    lower('I''en_us') -> 'i'
    lower('I''tr_tr') -> 'ı' (small dotless i)
    SELECT icu_load_collation('tr_TR''turkish');

    CREATE TABLE aust_turkish_penpals(
    australian_penpal_name TEXT COLLATE australian,
    turkish_penpal_name    TEXT COLLATE turkish
    );
    Birde aşağıdaki gibi bir bilgi buldum bir incele istersen. Senin yerine ben kafayı yiyeceğim yoksa :)


    PHP:
    public class Sqlite_DB
    {
        private 
    SqliteConnection CON;
        public  
    SqliteCommand COM;



        
    string dbName System.IO.Path.Combine(@"sdcard", @"testDB.db3");

        public 
    Sqlite_DB()
        {
            
    TOUPPER.RegisterFunction(typeof(TOUPPER));
            
    CollationCaseInsensitive.RegisterFunction(typeof(CollationCaseInsensitive));
            
    CON=new SqliteConnection(String.Format("Data Source={0};Pooling={1}"dbNamefalse));
            
    COM=new SqliteCommand(CON);

        }
        public 
    void close()
        {
            
    COM.Clone();
            
    CON.Clone();
        }
        public 
    void open()
        {
            
    CON.Open();
        }

    }

    #region TOUPPER
    [Mono.Data.Sqlite.SqliteFunction(Name "TOUPPER"Arguments 1FuncType FunctionType.Scalar)]
    public class 
    TOUPPERMono.Data.Sqlite.SqliteFunction
    {
        public 
    override object Invoke(object[] args)//characters for the growth of
        
    {
            return 
    args[0].ToString().ToUpper();
        }
    }    

    [
    Mono.Data.Sqlite.SqliteFunction(Name "COLLATION_CASE_INSENSITIVE"FuncType FunctionType.Collation)]
    class 
    CollationCaseInsensitive Mono.Data.Sqlite.SqliteFunction
    {
        public 
    override int Compare(string param1string param2//According to Turkish character sorting to patch
        
    {
            return 
    String.Compare(param1param2true);
        }
    }
    #endregion

    public class TEST_X
    {
        
    string strValue="ir";//test
        
    public void MUSTERI()
        {
            
    string srg="select * from "+Cari_._
                    
    +"where TOUPPER(musteri) like '%"+strValue.toUpper()+"%';";

            try {
                
    Sqlite_DB d=new Sqlite_DB();
                
    d.open();

                
    d.COM.CommandText=srg;

                
    SqliteDataReader dr=d.COM.ExecuteReader();

                while (
    dr.Read())
                {

                    
    Android.Util.Log.Error(">>>>",dr[0].ToString()+"<<<");

                }
                
    d.close();

            } catch (
    Exception ex) {
                
    Android.Util.Log.Error(">>>>",ex+"<<<");
            }

        }
    }


    ID   musteri
    ---  ----------
    1    İrem                
    2    Kadir                
    3    Demir

    returning result
    :

    -
    İrem

    -Kadir

    -Demir
    Buda ayrı bir yöntemmiş :)
    PHP:
    SELECT "Countries"."countryName",
      
    "Countries"."countryCode",
      
    "Countries"."telephoneCode",
      
    "Countries"."isIbanMantadatory"
    FROM "Countries"
    WHERE     (Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace("Countries"."countryName""Ü""u"), "ü""u"), "G""g"), "g""g"), "S""s"), "s""s"), "I""i"), "İ""i"), "Ö""o"), "ö""o"), "Ç""c"), "ç""c")) LIKE (Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(:"countryParams ""Ü""u"), "ü""u"), "G""g"), "g""g"), "S""s"), "s""s"), "I""i"), "i""i"), "Ö""o"), "ö""o"), "Ç""c"), "ç""c")) || '%' AND (Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace("Countries"."telephoneCode""Ü""u"), "ü""u"), "G""g"), "g""g"), "S""s"), "s""s"), "I""i"), "İ""i"), "Ö""o"), "ö""o"), "Ç""c"), "ç""c")) LIKE (Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(:"telefonParams ""Ü""u"), "ü""u"), "G""g"), "g""g"), "S""s"), "s""s"), "I""i"), "i""i"), "Ö""o"), "ö""o"), "Ç""c"), "ç""c")) || '%'
    Aşağıdaki kod yapısınıda bir incele.

    HTML:
    [SQLiteFunction(Name = "TOUPPER", Arguments = 1, FuncType = FunctionType.Scalar)]
        public class TOUPPER: SQLiteFunction
        {
            public override object Invoke(object[] args)
            {
                return args[0].ToString().ToUpper();
            }
        }      
    
        [SQLiteFunction(Name = "COLLATION_CASE_INSENSITIVE", FuncType = FunctionType.Collation)]
        class CollationCaseInsensitive : SQLiteFunction {
            public override int Compare(string param1, string param2) {
                return String.Compare(param1, param2, true);
            }
        }
    
    TOUPPER.RegisterFunction(typeof(TOUPPER));
     
    Son düzenleme: 13 Şubat 2017
    siirsen bunu beğendi.
  8. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    @AspDev bey, windows telefonlarda çalışması için bu programı yapıyorum, android değil. Yukarıdaki kodlarla bir şey yapabileceğimi sanmıyorum.
    Bu yüzden UWP projesi hazırladım, hem telefon, tablet hem de bilgisayarda çalışacak.
    Veritabanı konusunda eskiden access kullanırdım. Fazlası ile işimi görüyordu, bu tür sorunlar oluşturmuyordu.
    Şimdilik türkçe karakterleri aramada zorluk çıkarmasın bana bu sqlite bir şey istemez oldum, yeni sürümlerinde belki düzelir; çıkarsa onlarla değiştiririm. İlginiz için teşekkür ederim. Cahilce bir soru olacak ama, Windows yüklü telefonlarda sqlite'dan başkası kullanılmıyor öyle değil mi?
     
  9. AspDev

    AspDev Üye

    Kayıt:
    18 Ocak 2017
    Mesajlar:
    36
    Beğenilen Mesajlar:
    12
    Şehir:
    Sivas
    Maalesef şuan öyle görünüyor SQLLite Microsoft'un tercihi bu sorun dediğin gibi sorun çıkarıyor ise bunu daha önce yapmış birileri olması gerek herkeste aynı sorunu vermedi ya bu zımbırtı. Eğer böyle bir sorun varsa bile bir an önce veritabanının ivedi bir şekilde sürüm atmaları ve sorunları halletmeleri gerek.
     
  10. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Kendi dillerinde bir sorun yaşandığını sanmıyorum. Sorun Türkçe karakterlerin işe karışmasında. Başka dillerde bu sorun nasıl hallediliyor pek araştıramadım. Yukarıda projenin ilgili kısmını paylaştım. Sizde de aynı sorun oluşmuyor mu? Nuget'ten SQLite for Universal Windows Platform , Visual C++ 2015 Runtime for Universal Windows Platform Apps ve SQLite.Net-PCL yüklü referans olarak. 20162017.txt dosyasında veriler var. x86 ile Local Makinede projeyi derlediğim zaman ilgili sqlite veritabanı C:\Users\KULLANICI ADI\AppData\Local\Packages\XXXXXXXXXXX\LocalState incelemek mümkün.
     
  11. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Komik olacak ama ilginç bir yöntem buldum ama pek sağlıklı değil.
    Türkçe karakterler için joker karakter, %. Kimi durumda sonuç vermiyor.
    ÇİMEN AKİF => %%MEN AK%F olumlu

    Kod:
                    String ARAe = txtADSOYAD.Text  ;
                    ARAe = Regex.Replace(ARAe, "Ü", "%");
                    ARAe = Regex.Replace(ARAe, "ü", "%");
                    ARAe = Regex.Replace(ARAe, "Ö", "%");
                    ARAe = Regex.Replace(ARAe, "ö", "%");
                    ARAe = Regex.Replace(ARAe, "Ğ", "%");
                    ARAe = Regex.Replace(ARAe, "ğ", "%");
                    ARAe = Regex.Replace(ARAe, "Ş", "%");
                    ARAe = Regex.Replace(ARAe, "ş", "%");
                    ARAe = Regex.Replace(ARAe, "Ç", "%");
                    ARAe = Regex.Replace(ARAe, "ç", "%");
                    ARAe = Regex.Replace(ARAe, "İ", "%");
                    ARAe = Regex.Replace(ARAe, "ı", "%");
     SQL = $"Select * FROM TABLOOKUL WHERE TABLOOKUL.vADISOYADI LIKE '%{@ARAe}%'";
    
        using (SQLiteConnectionWithLock CNNVT = new SQLiteConnectionWithLock(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), new SQLiteConnectionString(MainPage.VT_PATH, true)))
                    {  
                        var Database = new SQLite.Net.Async.SQLiteAsyncConnection(() => CNNVT);
                        await Database.ExecuteAsync("PRAGMA encoding='UTF-8'");
                        List<TABLOOKUL> listKM = await Database.QueryAsync<TABLOOKUL>(SQL);
    
     var result2 = listKM.OrderBy(a => a.vADISOYADI).ThenBy(a => a.vSINIFI);
                    System.Collections.ObjectModel.ObservableCollection<TABLOOKUL> ListOB = new System.Collections.ObjectModel.ObservableCollection<TABLOOKUL>(listKM);
                    LW1.ItemsSource =ListOB ; //listKM ;
                     }
    
     
  12. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Türkçe karakterlerle tam aramada tam olarak sorunu çözdüm ( Buradaki yanıtın bir benzerini kullandım). Ancak arama kelimesini yazarken SQL sorgusu ile süzme konusunda tam anlamı ile başarı sağlayamasamda aşağıdaki yöntem ile sorun büyük oranda çözülüyor.
    Örneğin: ÇİĞDEM ÇİMEN isimli bir kişinin adını yazdığımda aramada LIKE %___DEM __MEN% şeklinde yapılıyor. Tam olarak nasıl sonuçlar ürettiğini bilmesem de sonuçlar güzel
    Kod:
                    ARAe = Regex.Replace(ARAe, "Ü", "_");
                    ARAe = Regex.Replace(ARAe, "ü", "_");
                    ARAe = Regex.Replace(ARAe, "Ö", "_");
                    ARAe = Regex.Replace(ARAe, "ö", "_");
                    ARAe = Regex.Replace(ARAe, "Ğ", "_");
                    ARAe = Regex.Replace(ARAe, "ğ", "_");
                    ARAe = Regex.Replace(ARAe, "Ş", "_");
                    ARAe = Regex.Replace(ARAe, "ş", "_");
                    ARAe = Regex.Replace(ARAe, "Ç", "_");
                    ARAe = Regex.Replace(ARAe, "ç", "_");
                    ARAe = Regex.Replace(ARAe, "İ", "_");
                    ARAe = Regex.Replace(ARAe, "ı", "_");
    
    Türkçe karakter de olsa tam olarak eşleşen tek arama yapıyor :

    Kod:
    SQLiteConnection CNNVT = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH, true);
                    CNNVT.BeginTransaction();
                    TABLOOKUL TOkul = CNNVT.Find<TABLOOKUL>(c => c.vADISOYADI == txtADSOYAD.Text);
                    if (TOkul != null)
                    {
                        txtYAZ.Text = TOkul.vID.ToString();
                    }
    
     
  13. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    Bu linkte yer alan SQLite sıralama sorunu için aşağıdaki kodları c#'ye eekleyemedim, ne yapmam gerekir. Bir sürü hata var çözemedim.
     
  14. siirsen

    siirsen Aktif Üye

    Kayıt:
    13 Ağustos 2008
    Mesajlar:
    361
    Beğenilen Mesajlar:
    0
    En sonunda yaptım. SQL sorgusunu başka şekilde yaparsan ve bir iki ince konuya da değinirsen oluyor. Umarım gecenin bu vaktinde serap benzeri bir şey görmüyorumdur. Her şey şuradaki yazı üzerine gelişti.
    Problem:
    1) Türkçe karakterlerle dolu verileri, veritabanındaki başka isimlerde de olabilecek bir tabloya, aktarırken bu harfleri tanınmaz hale getiriyordu.
    2) LIKE % ile arama yaparken Türkçe karakterdeki kelimeleri bulmuyordu.
    Çözüm:

    Kod:
     using (var cnn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH)) 
                        {
                        cnn.Execute("PRAGMA encoding = 'UTF-8'");
                        var connquery = cnn.Query<TABLOOKUL>("CREATE TABLE TABLOOKUL2 (vID integer NOT NULL PRIMARY KEY AUTOINCREMENT, vSINIFI TEXT, vNUMARASI integer, vADISOYADI TEXT, vOKULU TEXT, vYILI TEXT, vOGRETMENI TEXT )");
                    }
    
    Aşağıda özellikle @ işareti olan kısmı tekrarlamak gerekiyor.
    Kod:
    using (SQLite.Net.SQLiteConnection cnn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), MainPage.VT_PATH))
                                {
                                var cnnquery2 = cnn.Query<TABLOOKUL>("INSERT OR REPLACE INTO TABLOOKUL2(vSINIFI, vNUMARASI, vADISOYADI, vOKULU, vYILI, vOGRETMENI) VALUES (@vSINIFI, @vNUMARASI, @vADISOYADI, @vOKULU, @vYILI, @vOGRETMENI)", sütun[0], int.Parse(sütun[1]), sütun[2], sütun[3], sütun[4], sütun[5]); 
                            }
    
    İşin sırrı aşağıdaki SQL sorgusunda ve "%" + txtADSOYAD.Text + "%"
    Kod:
                    String ARAe = "%" + txtADSOYAD.Text + "%";
                     // JOKER HARF YERİNE GEÇİYOR _
                    //ARAe = Regex.Replace(ARAe, "Ü", "_");
                    //ARAe = Regex.Replace(ARAe, "ü", "_");
                    //ARAe = Regex.Replace(ARAe, "Ö", "_");
                    //ARAe = Regex.Replace(ARAe, "ö", "_");
                    //ARAe = Regex.Replace(ARAe, "Ğ", "_");
                    //ARAe = Regex.Replace(ARAe, "ğ", "_");
                    //ARAe = Regex.Replace(ARAe, "Ş", "_");
                    //ARAe = Regex.Replace(ARAe, "ş", "_");
                    //ARAe = Regex.Replace(ARAe, "Ç", "_");
                    //ARAe = Regex.Replace(ARAe, "ç", "_");
                    //ARAe = Regex.Replace(ARAe, "İ", "_");
                    //ARAe = Regex.Replace(ARAe, "ı", "_");
                    // bu sorgular hatalı sonuç üretiyor
                    //SQL = $"Select * FROM TABLOOKUL2 WHERE vADISOYADI LIKE '%{ARAe}%' ORDER BY vADISOYADI ASC , TABLOOKUL.vSINIFI ASC";
                    //SQL = $"SELECT * FROM TABLOOKUL WHERE TABLOOKUL.vADISOYADI LIKE '%{ARAe}%'";
                    ////DENEME 1:COLLATE UTF8CI COLLATE UTF8_CI
                    using (CNNVT = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), VT_PATH))
                    {
                       // BU SORGU TÜRKÇE KARAKTER OLSA DA TEK SORGUDA BULUYOR//List<TABLOOKUL> listKM = CNNVT.Query<TABLOOKUL>("Select * From TABLOOKUL2 where vADISOYADI = ?", ARAe).ToList();
                        List<TABLOOKUL> listKM = CNNVT.Query<TABLOOKUL>("Select * From TABLOOKUL2 where vADISOYADI LIKE ? ", ARAe).ToList();
                        //var result2 = listKM.OrderBy(a => a.vADISOYADI).ThenBy(a => a.vSINIFI);
                        System.Collections.ObjectModel.ObservableCollection<TABLOOKUL> ListOB = new System.Collections.ObjectModel.ObservableCollection<TABLOOKUL>(listKM);
                        LW1.ItemsSource = ListOB;// listKM;    
                    }