Bagikan melalui


Kesalahan database

SqliteException dilemparkan ketika kesalahan SQLite ditemui. Pesan disediakan oleh SQLite. Properti SqliteErrorCode dan SqliteExtendedErrorCode berisi kode hasil SQLite dari kesalahan.

Kesalahan mungkin terjadi kapan saja Microsoft.Data.Sqlite berinteraksi dengan pustaka SQLite asli. Daftar berikut ini memperlihatkan skenario umum di mana kesalahan dapat terjadi:

  • Membuka koneksi.
  • Memulai transaksi.
  • Menjalankan perintah.
  • Memanggil NextResult.

Pertimbangkan dengan cermat bagaimana aplikasi Anda akan menangani kesalahan ini.

Penguncian, percobaan ulang, dan batas waktu

Peringatan

Meskipun SQLite mendukung akses bersamaan ke database yang sama dari beberapa utas, objek API .NET tidak aman untuk utas. Ini berarti bahwa SqliteConnection, SqliteCommand dan SqliteDataReader tidak dapat dibagikan dan digunakan secara bersamaan dari beberapa utas. Saat menggunakan Microsoft.Data.Sqlite dari aplikasi bersamaan, cukup buat dan buka instans SqliteConnection baru kapan pun Anda perlu mengakses database (pembuatan pool memastikan bahwa ini adalah operasi cepat).

SQLite agresif dalam hal mengunci tabel dan file database. Jika aplikasi Anda memungkinkan akses ke database secara bersamaan, Anda mungkin akan mengalami kesalahan penuh dan terkunci. Anda dapat mengurangi banyak kesalahan dengan menggunakan pencatatan log di muka.

Setiap kali Microsoft.Data.Sqlite mengalami kesalahan yang sibuk atau terkunci, Microsoft.Data.Sqlite akan secara otomatis mencoba kembali hingga berhasil atau batas waktu perintah tercapai.

Anda dapat meningkatkan batas waktu perintah dengan mengatur CommandTimeout. Batas waktu default adalah 30 detik. Nilai 0 berarti tidak ada batas waktu.

// Retry for 60 seconds while locked
command.CommandTimeout = 60;

Microsoft.Data.Sqlite terkadang perlu membuat objek perintah implisit. Misalnya, selama BeginTransaction. Untuk mengatur batas waktu untuk perintah ini, gunakan DefaultTimeout.

// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;

Lihat juga