C# Winforms SQLite Kullanımı (VS 2013/VS 2015)

C# Winforms SQLite Kullanımı (VS 2013/VS 2015)

Merhaba arkadaşlar, bu başlıkta SQLite ile C#/Entity Framework çatısında Winforms uygulama geliştirmek için gerekli olan yapılandırmaları anlatacağım. Bu konuda pek çok kaynak var fakat VS 2013 ve VS 2015 kullanan yazılımcılar için SQLite’a giriş zorlu oluyor. Gömülü veritabanı sistemlerinde sorun yaşayan çok kişi var umarım yardımcı olur.

Nedir SQLite?
SQLite, en çok dağıtılan ve tavsiye edilen, tamamen C/C++ programlama dilleriyle geliştirilmiş açık kaynak SQL veritabanı motoru. Günümüzde mobil cihazlar ile kullanımı çok yaygınlaştı.

C# Winforms uygulama geliştirmede kullanılabilecek gömülü veritabanı sistemlerinin çoğunu denedim. (SQL Compact CE, LocalDB, SQL Server Lite…) Yaklaşık 1 yıl boyunca SQL Compact CE 4.0 kullanıyordum fakat bazı kullanıcılarımda sorunlar yaşamaya başlayınca farklı bir arayış içine girdim. C# Winforms gömülü SQL veritabanı motorları arasında kesinlikle en başarılı SQLite. (karşılaştırma tablosu). Kullanıcıya ekstra bir patch/güncelleştirme yükletme yükümlülüğü yok. (.Net Framework dışında)

Veri miktarı çok büyükse NoSQL tercih etmek mantıklı olacaktır, fakat küçük boyutlu masaüstü uygulamalar için SQLite yeterli.

En çok sevdiğim özellikleri

  • Kullanıcının ekstra bir paket yüklemesine gerek yok,
  • En kolay şekilde AutoIncrement primary key sütun tanımlayabilme,
  • Güncelleme yapıyorsak, yeni bir versiyonda farklı bir tablo yapılandırması gerekiyorsa birkaç satır kod ile tablo üzerinde ve model üzerinde değişikliğe izin vermekte. (Diğer gömülüler’de görmedim). En iyi avantajı bu.
  • Ücretsiz, güvenli, popüler.

Visual Studio 2015 için SQLite Kütüphanesi ve Eklentileri
SQLite resmi web sitesinden “SQLite sqlite-netFx46-setup-bundle-x86-2015-1.0.99.0″ paketi için anlatılmıştır.
VS2013 kullanıcıları uygun sürümü indirmelidir. Dikkat edilmesi gereken tek şey VS 2015 paketinde .Net Framework 4.6 ve üstü desteklenecek.

Kurulumda dikkat edilmesi tek önemli şey VS 2015 için eklenti kurulumu seçeneğini seçmek. VS 2013 içinse yine aynı şekilde.
sq0

Konsol ekranı ile devam eden kurulum bende 1 dk sürdü. (daha önce 5dk sürdüğünü hatırlıyorum, acele etmeyin)

Proje Oluşturma

  • Visual Studio 2015′ de New > New Project > (.Net Framework 4.6 seçili) > Windows Forms Application projesi oluşturuyoruz. (VS 2013 için 4.5.1 ve üstü)
  • NuGet Package Manager üzerinden “Entity Framework 6.x” kuruyoruz.
    nuget
  • Projemize c:\program files(x86)\System.Data.SQLite\2015\bin\ klasörü altındaki:
    SQLite.Designer.dll, System.Data.SQLite.dll, System.Data.SQLite.EF6.dll, System.Data.SQLite.Linq.dll dosyalarını referans olarak ekliyoruz.
    sqldll
  • Burası çok önemli! Eklediğimiz referans dosyalarının Copy Local seçeneğini “true” yapsakta, Debug klasörüne manuel kopyalamamız gerekiyor.
    copydll
  • Burası çok daha önemli, bu sorunu çözmem biraz zamanımı almıştı. Projemizin App.Config dosyasında eklediğimiz DLL dosyalarının versiyon ve accesstoken değerlerini doğru yazmamız gerekiyor. Kodu olduğu gibi alabilirsiniz. (VS 2013 için düzeltme gerekecek bir sonraki adımda yer almakta)

  • Yukarıda yer alan kodda “1.0.99.0” olarak geçen versiyon numarasını mevcut SQLite dll versiyonu ile değiştirmeniz gerekebilir. Hangi versiyonu kullandığınızı C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config dosyasında (SQLite) olarak aratarak bulabilir ve gerekli düzenlemeyi yapabilirsiniz.
  • Son olarak program.cs ana sınıfımıza aşağıdaki kodu eklemeniz gerekmektedir.
    programcs
  • Artık mevcut SQLite veritabanı modeli eklenebilir veya yeni Ado.Net Entity Model oluşturulabilir.

SQLite veritabanı oluşturmak

Ben SQLite veritabanı tablosu oluşturmak ve hızlıca düzenlememi sağlayan Firefox üzerinde  SQLite Manager eklentisini kullanıyorum ve tavsiye edebilirim. İsterseniz VS 2015 üzerinden Server Explorer penceresinden de SQLite veritabanı oluşturabilirsiniz. (SQLite Manager de autoincrement ile primary key oluşturmak mümkün).

  • Projemize yeni item ekliyoruz. Sırasıyla:

ado1 ado2 ado3 ado4 ado5

  • Veritabanımızı projemiz üzerinde modelledik. Artık tüm imkanlarından faydalanabiliriz. Tebrikler.

ado6 ado7

14 thoughts on “C# Winforms SQLite Kullanımı (VS 2013/VS 2015)

  1. merhaba, öncelikle yazınız için teşekkürler. sqlite manager ile de yapsam server explorer’dan da oluşturmaya kalksam ya da var olan bi sqlite veritabanına bağlanmaya çalışsam “unable to open database file” hatası alıyorum. çözümünü biliyor musunuz?

    1. Merhaba Buğra, Şu kodu deneyebilir misin? Exception Message alabilirsiniz belki.

      Daha önce SQLite Manager alternatifi programlarla veritabanımı düzenlediğimde bu hatayı almıştım. Server Explorer yada Firefox SQLite Manager dışındaki programlar bu konuda iyi değil, veritabanın bozulmuş olabilir. Eğer bu yüzden ise alternatif yazılımlarla açabilirsen SQL Export yaparak verilerini başka bir veritabanı dosyasına taşıyabilirsin.

      Ben teşekkür ederim, iyi çalışmalar dilerim.

  2. Merhaba Emre bey, ben amator olarak c# ile ugrasiyorum. Sql server ile ile olusturdugum database tablolarina kayit yapma silme sorgulama gibi islemlerimi linq to sql kullanarak yapabiliyorum.sql komutlarini iyi bilmedigim icin sayet gomulu sqlite kullanirsam datacontext ile linq to sql kullanabilirmiyim?Tesekkurler.

    1. Tabii ki, syntax olarak aynı. Ado.Net entity model eklediğinizde ‘DbEntities’ gibi oluşan sınıf DataContext’iniz olacak.

      Umarım doğru anlamışımdır sorunuzu, geç cevapladığım için kusra bakmayın..

  3. Merhabalar, Sqlite veritabanındaki bir tabloyu form üzerindeki bir datatable’a yazdırmak için ne yapmalıyım?

    1. Merhabalar,
      Entity Framework gibi bir yapı kullanmıyorsanız aşağıdaki kod bloğu gibi bir kullanımı olmalı.
      Bunu daha önce kullandığım bir projeden aldım. SQLite’da yer alan tabloları listelemektedir.

  4. Merhabalar, ben yönlendirdiğiniz şekilde SQLite ‘i projeme dahil ettim ve kullandım. Fakat projemi setup haline getirirken nasıl bir yol izlemem gerekiyor SQLite ‘i kullanıcı bilgisayara kurmam mı gerekiyor bir türlü çözemedim. Yaptığım setup ile programı kendi bilgisayarıma(uygulamayı geliştirdiğim) kurduğum zaman çalışırken başka bir bilgisayara kurduğumda sqlite dll hatası veriyor, bunu nasıl çözebilirim? Şimdiden teşekkürler

    1. Merhaba, setup konusunda benim izlediğim bir yol yok.
      Başka bilgisayarda çalışmama nedeni:
      1) DLL eksikliği olabilir. Projeye eklediğin referans dosyalarının properties->copy local=true seçmeyi atlamış olabilirsin.
      2) App.config’de yer alan connecting string’de c:\ d:\gibi konum kalmış olabilir. AppDirectory gibi kalıp kullanmana göre yok direkt dosya adını yazarsan aynı dizine bakıyor.

      ***) Bence Entity Framework Core SQLite ile ilgili güncel yazımı inceleyebilirsin, hiç bu kadar teferruata gerek kalmıyor ve resmi dokümanlar var.
      https://yorum-satiri.com/entity-framework-core-sqlite-ve-winforms-ile-ornek-uygulama/
      Saygılarımla, iyi çalışmalar.

  5. UWP projesinde, Windows yüklü telefon için, SQLite kullanıyorum ama içinde İ, Ş, Ç gibi Türkçe karakterli olan kelime veya kelime gruplarını aratırken sorun yaşıyorum. Sonuç vermiyor, veri yok diyor. Ayrıca çekilen verilerde Türkçe karakterlerle başlayan kelimeleri doğru sıralamıyor, hep sonlarda gösteriyor. O kadar araştırmama rağmen çözüm bulamadım. Yeri değil ama yardımcı olursanız sevinirim.

    1. Merhaba, çok cevap veriyorum farketmemiştim kusra bakmayın.

      Büyük/Küçük harfe duyarlı oluşturmuş olabilirsiniz. Search query’i:
      Select * from [table] where [column_name] like ‘%” + searchText.toUpperCase() + “%’ COLLATE NOCASE”; şekline ararsanız çözüleceğini düşünüyorum.

    1. Merhaba Murat,
      Sqlite birden fazla erişime izin vermekte, fakat kilitleme sistemi nasıl bilmiyorum, bu şekilde kullanmadım, trafiğin yoğun olduğu sistemlerde VTYS kullanman daha doğru olacaktır.

      Fakat şöyle bir bilgi var: kilitlemeyi yakalayabilirsin
      System.Data.SQLite kütüphanesinde (using System.Data.SQLite)

  6. Merhaba Emre Bey, Öncelikle paylaşımınız için teşekkür ederim. Ben kendi çapında amatör bile sayılmadan internetten bulduğum kodlarla kendime ufak uygulamalar yapmaktayım. Sqlite kullanmak dosya açısından arayıp ta bulamadığım bir şeydi. VS 2015, EF 4.6.1 kullanıyorum. Entity üzerinden model oluşturmak istediğimde oluşturduğum SQLite database i göremiyorum. New Connection da SQlite bulamıyorum. (Machine.Config de de Sqlite bulamıyorum) Videonuzu ve yazınızı birebir taklit ettim ama bir türlü database bağlantısı yapamadım. Neyi eksik yaptığıma dair bir fikriniz varsa cevaplarsanız memnun olurum. İyi çalışmalar dilerim.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.