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.
Xamarin, tanıdık ADO kullanılarak kullanıma sunulan iOS'ta bulunan SQLite veritabanı için yerleşik desteğe sahiptir. NET benzeri söz dizimi. Bu API'leri kullanmak için SQLite tarafından işlenen , INSERT ve SELECT deyimleri gibi CREATE TABLESQL deyimleri yazmanız gerekir.
Derleme Başvuruları
ADO.NET aracılığıyla erişim SQLite'i kullanmak için, burada gösterildiği gibi iOS projenize ve Mono.Data.Sqlite başvurular eklemeniz System.Data gerekir (Mac için Visual Studio ve Visual Studio'daki örnekler için):
Başvurular > Başvuruları Düzenle... öğesine sağ tıklayın ve ardından gerekli derlemeleri seçmek için tıklayın.
Mono.Data.Sqlite Hakkında
boş bir veritabanı dosyası oluşturmak ve ardından veritabanında SQL yönergelerini yürütmek için kullanabileceğimiz nesnelerin örneğini SqliteCommand oluşturmak için sınıfını kullanacağızMono.Data.Sqlite.SqliteConnection.
Boş Veritabanı Oluşturma - Geçerli (yazılabilir) bir dosya yolu ile yöntemini çağırın
CreateFile. Bu yöntemi çağırmadan önce dosyanın zaten var olup olmadığını denetlemeniz gerekir, aksi takdirde eski dosyanın üst kısmında yeni bir (boş) veritabanı oluşturulur ve eski dosyadaki veriler kaybolur:Mono.Data.Sqlite.SqliteConnection.CreateFile (dbPath);Not
Değişken,
dbPathbu belgenin önceki bölümlerinde açıklanan kurallara göre belirlenmelidir.Veritabanı Bağlan oluşturma - SQLite veritabanı dosyası oluşturulduktan sonra verilere erişmek için bir bağlantı nesnesi oluşturabilirsiniz. Bağlantı, burada gösterildiği gibi biçiminde
Data Source=file_pathbir bağlantı dizesi oluşturulur:var connection = new SqliteConnection ("Data Source=" + dbPath); connection.Open(); // do stuff connection.Close();Daha önce belirtildiği gibi, bir bağlantı hiçbir zaman farklı iş parçacıkları arasında yeniden kullanılmamalıdır. Şüpheniz varsa, bağlantıyı gerektiği gibi oluşturun ve işiniz bittiğinde kapatın; ancak bunu gerektiğinden daha sık yapma hakkında da dikkatli olun.
Veritabanı Komutu Oluşturma ve Yürütme - Bir bağlantı oluşturduktan sonra buna karşı rastgele SQL komutları yürütebiliriz. Aşağıdaki kod yürütülmekte olan bir CREATE TABLE deyimini gösterir.
using (var command = connection.CreateCommand ()) { command.CommandText = "CREATE TABLE [Items] ([_id] int, [Symbol] ntext, [Name] ntext);"; var rowcount = command.ExecuteNonQuery (); }
SQL'i doğrudan veritabanına karşı yürütürken, zaten var olan bir tablo oluşturmaya çalışma gibi geçersiz isteklerde bulunmamak için normal önlemleri almanız gerekir. "SQLite hata tablosu [Öğeler] zaten var" gibi bir SqliteException'a neden olmayacak şekilde veritabanınızın yapısını izleyin.
Temel Veri Erişimi
Bu belgenin DataAccess_Basic örnek kodu iOS üzerinde çalışırken şöyle görünür:

Aşağıdaki kod, basit SQLite işlemlerinin nasıl gerçekleştiriltiğini gösterir ve sonuçları uygulamanın ana penceresinde metin olarak gösterir.
Şu ad alanlarını eklemeniz gerekir:
using System;
using System.IO;
using Mono.Data.Sqlite;
Aşağıdaki kod örneği, veritabanı etkileşiminin tamamını gösterir:
- Veritabanı dosyası oluşturma
- Veri ekleme
- Veriyi sorgulama
Bu işlemler genellikle kodunuzun tamamında birden çok yerde görünür. Örneğin, uygulamanız ilk kez başlatıldığında veritabanı dosyasını ve tablolarını oluşturabilir ve uygulamanızdaki tek tek ekranlarda veri okuma ve yazma işlemleri gerçekleştirebilirsiniz. Aşağıdaki örnekte, bu örnek için tek bir yöntem halinde gruplandırılmıştır:
public static SqliteConnection connection;
public static string DoSomeDataAccess ()
{
// determine the path for the database file
string dbPath = Path.Combine (
Environment.GetFolderPath (Environment.SpecialFolder.Personal),
"adodemo.db3");
bool exists = File.Exists (dbPath);
if (!exists) {
Console.WriteLine("Creating database");
// Need to create the database before seeding it with some data
Mono.Data.Sqlite.SqliteConnection.CreateFile (dbPath);
connection = new SqliteConnection ("Data Source=" + dbPath);
var commands = new[] {
"CREATE TABLE [Items] (_id ntext, Symbol ntext);",
"INSERT INTO [Items] ([_id], [Symbol]) VALUES ('1', 'AAPL')",
"INSERT INTO [Items] ([_id], [Symbol]) VALUES ('2', 'GOOG')",
"INSERT INTO [Items] ([_id], [Symbol]) VALUES ('3', 'MSFT')"
};
// Open the database connection and create table with data
connection.Open ();
foreach (var command in commands) {
using (var c = connection.CreateCommand ()) {
c.CommandText = command;
var rowcount = c.ExecuteNonQuery ();
Console.WriteLine("\tExecuted " + command);
}
}
} else {
Console.WriteLine("Database already exists");
// Open connection to existing database file
connection = new SqliteConnection ("Data Source=" + dbPath);
connection.Open ();
}
// query the database to prove data was inserted!
using (var contents = connection.CreateCommand ()) {
contents.CommandText = "SELECT [_id], [Symbol] from [Items]";
var r = contents.ExecuteReader ();
Console.WriteLine("Reading data");
while (r.Read ())
Console.WriteLine("\tKey={0}; Value={1}",
r ["_id"].ToString (),
r ["Symbol"].ToString ());
}
connection.Close ();
}
Daha Karmaşık Sorgular
SQLite veriler üzerinde rastgele SQL komutlarının çalıştırılmasına izin verdiğinden, istediğiniz CREATE, INSERT, UPDATE, DELETE veya SELECT deyimlerini gerçekleştirebilirsiniz. Sqlite web sitesinde SQLite tarafından desteklenen SQL komutları hakkında bilgi edinebilirsiniz. SQL deyimleri bir SqliteCommand nesnesinde üç yöntemden biri kullanılarak çalıştırılır:
- ExecuteNonQuery – Genellikle tablo oluşturma veya veri ekleme için kullanılır. Bazı işlemlerin dönüş değeri etkilenen satır sayısıdır, aksi takdirde -1 olur.
- ExecuteReader – Bir satır koleksiyonu olarak
SqlDataReaderdöndürülmesi gerektiğinde kullanılır. - ExecuteScalar : Tek bir değer (örneğin bir toplama) alır.
EXECUTENONQUERY
INSERT, UPDATE ve DELETE deyimleri etkilenen satır sayısını döndürür. Diğer tüm SQL deyimleri -1 döndürür.
using (var c = connection.CreateCommand ()) {
c.CommandText = "INSERT INTO [Items] ([_id], [Symbol]) VALUES ('1', 'APPL')";
var rowcount = c.ExecuteNonQuery (); // rowcount will be 1
}
EXECUTEREADER
Aşağıdaki yöntem SELECT deyiminde WHERE yan tümcesini gösterir. Kod tam bir SQL deyimi oluşturduğundan, dizeler etrafında tırnak işareti (') gibi ayrılmış karakterlerin kaçmasına dikkat edilmelidir.
public static string MoreComplexQuery ()
{
var output = "";
output += "\nComplex query example: ";
string dbPath = Path.Combine (
Environment.GetFolderPath (Environment.SpecialFolder.Personal), "ormdemo.db3");
connection = new SqliteConnection ("Data Source=" + dbPath);
connection.Open ();
using (var contents = connection.CreateCommand ()) {
contents.CommandText = "SELECT * FROM [Items] WHERE Symbol = 'MSFT'";
var r = contents.ExecuteReader ();
output += "\nReading data";
while (r.Read ())
output += String.Format ("\n\tKey={0}; Value={1}",
r ["_id"].ToString (),
r ["Symbol"].ToString ());
}
connection.Close ();
return output;
}
ExecuteReader yöntemi bir SqliteDataReader nesnesi döndürür. Örnekte gösterilen Read yöntemine ek olarak, diğer yararlı özellikler şunlardır:
- Etkilenen Satırlar : Sorgudan etkilenen satırların sayısı.
- HasRows – Herhangi bir satırın döndürülip döndürülmediği.
EXECUTESCALAR
Tek bir değer (toplama gibi) döndüren SELECT deyimleri için bunu kullanın.
using (var contents = connection.CreateCommand ()) {
contents.CommandText = "SELECT COUNT(*) FROM [Items] WHERE Symbol <> 'MSFT'";
var i = contents.ExecuteScalar ();
}
Yöntemin ExecuteScalar dönüş türü: object Sonucu veritabanı sorgusuna bağlı olarak atamanız gerekir. Sonuç, COUNT sorgusundan bir tamsayı veya tek sütunlu SELECT sorgusundan bir dize olabilir. Bunun, okuyucu nesnesi döndüren diğer Execute yöntemlerinden veya etkilenen satır sayısının sayısından farklı olduğunu unutmayın.
Microsoft.Data.Sqlite
NuGet'ten yüklenebilen ve işlevsel olarak aynı sorgu türlerine Mono.Data.Sqlite izin veren başka bir kitaplık Microsoft.Data.Sqlitevardır.
İki kitaplık ile Xamarin'e özgü bazı ayrıntılar arasında bir karşılaştırma vardır. Xamarin.iOS uygulamaları için en önemlisi, bir başlatma çağrısı eklemeniz gerekir:
// required for Xamarin.iOS
SQLitePCL.Batteries_V2.Init();

