Do I have to Dispose the SQLiteCommand objects?

.net-3.5, c#, sqlite, system.data.sqlite

Solution

It's best-practise to dispose everything that implements `IDisposable` as soon as you're finished with it because it might use unmanaged resources.

This should be done with the `using`-statement since it wraps the code that uses this object and because it disposes it also in case of an exception.

using(var con = new SQLiteConnection(conString))
using(var cmd = new SQLiteCommand(con))
{
    con.Open();
    // ...
} // also closes the connection

Problem

How do I treat the `SQLiteCommand` object, do I have to call `Dispose()` after `ExecuteScalar`, `ExecuteNonQuery` and `ExecuteReader` or not? The documentation example on SQLiteCommand doesn't dispose it whilst in the SQLiteTransaction the example disposes the SQLiteCommand object. I always close the data reader object though. My application accesses the db from many threads. Mostly I am interested in not leaking connections or disturbing SQLite. I am aware of `using` and `IDisposable` usage

Original source