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.
SqliteException bir SQLite hatasıyla karşılaşıldığında oluşturulur. İleti SQLite tarafından sağlanır. ve SqliteErrorCode özellikleri hatanın SqliteExtendedErrorCode SQLite sonuç kodunu içerir.
Microsoft.Data.Sqlite yerel SQLite kitaplığıyla etkileşime geçildiğinde hatalarla karşılaşılabilir. Aşağıdaki listede hataların oluşabileceği yaygın senaryolar gösterilmektedir:
- Bağlantı açılıyor.
- Bir işlem başlatılıyor.
- Bir komut çalıştırılıyor.
- Arama yapılıyor NextResult.
Uygulamanızın bu hataları nasıl işleyeceklerini dikkatle göz önünde bulundurun.
Kilitleme, yeniden denemeler ve zaman aşımları
Uyarı
SQLite birden çok iş parçacığından aynı veritabanına eşzamanlı erişimi desteklese de, .NET API'leri nesneleri iş parçacığı açısından güvenli değildir. Bu, SqliteConnection, SqliteCommand ve SqliteDataReader bileşenlerinin birden çok iş parçacığı tarafından aynı anda paylaşılamaz ve kullanılamaz olduğu anlamına gelir.
Eşzamanlı bir uygulamada Microsoft.Data.Sqlite kullanırken, veritabanına erişmeniz gereken her durumda yeni bir SqliteConnection örneği oluşturup açmanız yeterlidir (havuzlama, bunun hızlı bir işlem olmasını sağlar).
Tabloları ve veritabanı dosyalarını kilitleme konusunda SQLite agresiftir. Uygulamanız herhangi bir eşzamanlı veritabanı erişimini etkinleştirirse, büyük olasılıkla yoğunluk ve kilitlenme hatalarıyla karşılaşırsınız. Önceden yazma günlüğünü kullanarak birçok hatayı azaltabilirsiniz.
Microsoft.Data.Sqlite meşgul veya kilitli bir hatayla karşılaştığında, başarılı olana veya komut zaman aşımına ulaşılana kadar otomatik olarak yeniden dener.
CommandTimeout ayarını değiştirerek bir komutun zaman aşımını artırabilirsiniz. Varsayılan zaman aşımı 30 saniyedir. değeri 0 zaman aşımı olmadığı anlamına gelir.
// Retry for 60 seconds while locked
command.CommandTimeout = 60;
Microsoft.Data.Sqlite'ın bazen örtük bir komut nesnesi oluşturması gerekir. Örneğin, BeginTransaction sırasında. Bu komutların zaman aşımını ayarlamak için kullanın DefaultTimeout.
// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;