Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SQLite kullanarak verileri kullanıcının cihazında hafif bir veritabanında depolayabilir ve alabilirsiniz. Bu kılavuz nasıl yapılacağını gösterir.
Yerel depolama için SQLite kullanmanın bazı avantajları
✔️ SQLite hafiftir ve bağımsızdır. Başka bağımlılıkları olmayan bir kod kitaplığıdır. Yapılandıracak bir şey yok.
✔️ Veritabanı sunucusu yok. İstemci ve sunucu aynı işlemde çalışır.
✔️ SQLite, genel etki alanında olduğundan, bunu ücretsiz olarak kullanabilir ve uygulamanızla dağıtabilirsiniz.
✔️ SQLite, platformlar ve mimariler arasında çalışır.
SQLite hakkında daha fazla bilgiyi buradaokuyabilirsiniz.
Soyutlama katmanı seçme
Microsoft tarafından oluşturulan Entity Framework Core veya açık kaynak SQLite kitaplığı kullanmanızı öneririz.
Entity Framework Core (Varlık Çerçevesi Çekirdeği)
Entity Framework (EF), etki alanına özgü nesneleri kullanarak ilişkisel verilerle çalışmak için kullanabileceğiniz nesne-ilişkisel eşleyicidir. Bu çerçeveyi diğer .NET uygulamalarındaki verilerle çalışmak için zaten kullandıysanız, bu kodu bir UWP uygulamasına geçirebilirsiniz ve bağlantı dizesinde uygun değişikliklerle çalışır.
Denemek için bkz: EF Core kullanmaya başlama.
SQLite kitaplığı
Microsoft.Data.Sqlite kitaplığı, System.Data.Common ad alanında arabirimleri uygular. Microsoft bu uygulamaları etkin bir şekilde korur ve alt düzey yerel SQLite API'sinin çevresinde sezgisel bir sarmalayıcı sağlar.
Bu kılavuzun geri kalanı bu kitaplığı kullanmanıza yardımcı olur.
Çözümünüzü Microsoft.Data.SQlite kitaplığını kullanacak şekilde ayarlama
Temel bir UWP projesiyle başlayacağız ve ardından uygun Nuget paketlerini yükleyeceğiz.
Not
Microsoft.Data.Sqlite' package and not 'Microsoft.Data.Sqlite.Coreyüklediğinizden emin olun. Bu paket, bağımlılık olarak Microsoft.Data.Sqlite.Core yükler.
Windows'un desteklenen tüm sürümleri SQLite'i desteklediğinden uygulamanızın SQLite kitaplıklarını paketlemesi gerekmez. Bunun yerine, uygulamanız Windows ile birlikte yüklenen SQLite sürümünü kullanabilir. Bu size birkaç şekilde yardımcı olur.
✔️ SQLite ikili dosyasını indirip uygulamanızın bir parçası olarak paketlemeniz gerekmeyen uygulamanızın boyutunu küçültür.
✔️ SQLite'in SQLite'teki hatalarda ve güvenlik açıklarında kritik düzeltmeler yayımlaması durumunda uygulamanızın yeni bir sürümünü kullanıcılara göndermenizi önler. SQLite'in Windows sürümü Microsoft tarafından SQLite.org ile eşgüdümlü olarak korunur.
✔️ Uygulama yükleme süresinin daha hızlı olma olasılığı vardır çünkü büyük olasılıkla SQLite'in SDK sürümü belleğe zaten yüklenir.
UWP projenize DataAccessadlı bir sınıf ekleyerek başlayalım. Veri erişim kodunuzu içeren bir .NET Standart sınıf kitaplığı projesi kullanabilirsiniz, ancak örneğimizde kullanmayacağız.
Çözüme sağ tıklayın ve Çözümiçin NuGet Paketlerini Yönet'e tıklayın.
Bu noktada, bir seçeneğiniz vardır. Windows ile birlikte gelen SQLite sürümünü kullanabilirsiniz veya belirli bir SQLite sürümünü kullanmak için bir nedeniniz varsa, paketinize SQLite kitaplığını ekleyebilirsiniz. Windows'a dahil olan SQLite sürümünü kullanacağız.
Gözat sekmesini seçin, Microsoft.Data.SQLite.Core paketini arayın ve ardından en son kararlı sürümü yükleyin.
SQLite veritabanında veri ekleme ve alma
Şunları yapacağız:
1️⃣ Veri erişim sınıfını hazırlayın.
2️⃣ SQLite veritabanını başlatın.
3️⃣ SQLite veritabanına veri ekleyin.
4️⃣ SQLite veritabanından veri alın.
5️⃣ Temel bir kullanıcı arabirimi ekleyin.
Veri erişim sınıfını hazırlama
Projenizde DataAccess sınıfını açın ve bu sınıfı statik hale getirin.
Not
Örneğimiz veri erişim kodunu statik bir sınıfa yerleştirecek olsa da, bu yalnızca bir tasarım seçimidir ve tamamen isteğe bağlıdır.
public static class DataAccess
{
}
Aşağıdaki using deyimlerini bu dosyanın en üstüne ekleyin.
using Microsoft.Data.Sqlite;
using System.Collections.Generic;
SQLite veritabanını başlatma
SQLite veritabanını başlatan DataAccess sınıfına bir yöntem ekleyin.
public async static void InitializeDatabase()
{
await ApplicationData.Current.LocalFolder.CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists);
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
using (SqliteConnection db =
new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
String tableCommand = "CREATE TABLE IF NOT " +
"EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY, " +
"Text_Entry NVARCHAR(2048) NULL)";
SqliteCommand createTable = new SqliteCommand(tableCommand, db);
createTable.ExecuteReader();
}
}
Bu kod SQLite veritabanını oluşturur ve uygulamanın yerel veri deposunda depolar.
Bu örnekte veritabanını sqlliteSample.db adlandıracağız, ancak örneklediğiniz tüm SqliteConnection nesnelerinde bu adı kullandığınız sürece istediğiniz adı kullanabilirsiniz.
UWP projenizin App.xaml.cs dosyasının oluşturucusunda InitializeDatabase sınıfının DataAccess yöntemini çağırın.
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
DataAccess.InitializeDatabase();
}
SQLite veritabanına veri ekleme
SQLite veritabanına veri ekleyen DataAccess sınıfına bir yöntem ekleyin. Bu kod, SQL ekleme saldırılarını önlemek için sorgudaki parametreleri kullanır.
public static void AddData(string inputText)
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
using (SqliteConnection db =
new SqliteConnection($"Filename={dbpath}"))
{
SQLitePCL.Batteries.Init();
db.Open();
SqliteCommand insertCommand = new SqliteCommand();
insertCommand.Connection = db;
// Use parameterized query to prevent SQL injection attacks
insertCommand.CommandText = "INSERT INTO MyTable VALUES (NULL, @Entry);";
insertCommand.Parameters.AddWithValue("@Entry", inputText);
insertCommand.ExecuteReader();
}
}
SQLite veritabanından veri alma
SQLite veritabanından veri satırları alan bir yöntem ekleyin.
public static List<String> GetData()
{
List<String> entries = new List<string>();
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
using (SqliteConnection db =
new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
SqliteCommand selectCommand = new SqliteCommand
("SELECT Text_Entry from MyTable", db);
SqliteDataReader query = selectCommand.ExecuteReader();
while (query.Read())
{
entries.Add(query.GetString(0));
}
}
return entries;
}
Okuma yöntemi, döndürülen veri satırları arasında ilerler. Kalan satırlar varsa true döndürür, aksi takdirde falsedöndürür.
GetString yöntemi, belirtilen sütunun değerini dize olarak döndürür. İstediğiniz verilerin sıfır tabanlı sütun sırasını temsil eden bir tamsayı değeri kabul eder. GetDataTime ve GetBooleangibi benzer yöntemler kullanabilirsiniz. Sütunun içerdiği veri türüne göre bir yöntem seçin.
Tek bir sütundaki tüm girdileri seçtiğimiz için sıra parametresi bu örnekte bu kadar önemli değildir. Ancak, sorgunuzun parçası birden çok sütun varsa, verileri çekmek istediğiniz sütunu elde etmek için sıra değerini kullanın.
Temel kullanıcı arabirimi ekleme
UWP projesinin MainPage.xaml dosyasına aşağıdaki XAML'yi ekleyin.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<TextBox Name="Input_Box"></TextBox>
<Button Click="AddData">Add</Button>
<ListView Name="Output">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</Grid>
Bu temel kullanıcı arabirimi, kullanıcıya SQLite veritabanına ekleyebileceğimiz bir dize yazmak için kullanabileceği bir TextBox sağlar. Bu kullanıcı arabirimindeki Button, SQLite veritabanından veri alacak bir olay işleyicisine bağlanacak ve ardından bu veriler ListView'de gösterilecek.
MainPage.xaml.cs dosyasına aşağıdaki işleyiciyi ekleyin. Bu, kullanıcı arabirimindeki ClickButton olayıyla ilişkilendirdiğimiz yöntemdir.
private void AddData(object sender, RoutedEventArgs e)
{
DataAccess.AddData(Input_Box.Text);
Output.ItemsSource = DataAccess.GetData();
}
Ayrıca, uygulama başlatıldığında mevcut verilerin yüklendiğinden de emin olmak istiyoruz.
MainPageçağırmak için GetData() oluşturucusna bir kod satırı ekleyin.
public MainPage()
{
this.InitializeComponent();
Output.ItemsSource = DataAccess.GetData();
}
Hepsi bu kadar. SQLite veritabanınızla başka neler yapabileceğinizi görmek için Microsoft.Data.Sqlite
Sonraki adımlar
Uygulamanızı doğrudan bir SQL Server veritabanına bağlama
bkz. UWP uygulamasında SQL Server veritabanı kullanma.
Farklı platformlarda farklı uygulamalar arasında kod paylaşma
Bkz. Masaüstü ile UWParasında kod paylaşma.