On 21 Jun 2018, at 10:01pm, Phani Rahul Sivalenka 
<rahul.sivale...@walkingtree.tech> wrote:

> When we do a read operation and write/update operation on the SQLite DB,
> the write operation gets timed out saying the “db is locked”.

[...]

>   - Busy Timeout : 30sec
>   - Default Timeout : 30sec

I'm going to assume you're doing something like

SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder();
        connBuilder.Version = 3;
        connBuilder.DataSource = filePath;
        connBuilder.BusyTimeout = 30;
        connBuilder.DefaultTimeout = 30;

If this isn't what you're doing please tell us.

SQLite itself uses busyTimeout.  The unit of busyTimeout is milliseconds.  Try 
setting the value to 30000 and see if this fixes your problem.  I don't know 
what defaultTimeout means to the library you're using but try doing the same 
thing with that one.

How are you disposing of your SQLiteDataReader object after the reading is 
finished ?  Once the object has locked the file, while it still exists it can 
maintain a lock on the file.  One way to make sure that the object has been 
disposed of is to use this structure:

using (SQLiteCommand cmd = 
    new SQLiteCommand("SELECT * FROM sqlite_master;", cnn)) {
        using (SQLiteDataReader reader = cmd.ExecuteReader()) { 
            // extract data from reader so you don't need it any more
        } 
    }

You will need to dispose of your writing object too.  Possibly in a similar way.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to