SQLite Forum

> Programmatically, how can I choose the version of SQLite that I use?

We might be able to answer that if you could answer this:
Programmatically how do you choose the version of Windows/Linux you use?

Perhaps that's a tad unfair an example since SQLite isn't quite an OS unto itself, let's change that to:
Programmatically, how do you choose the version of MySQL/MSSQL that you use?

The answer is: You DON'T, because you CAN'T.  There is no special way in which to start your car that would change what Engine it is using today.

However, because SQLite is Open-Source, you CAN (unlike with Windows/MySQL/etc.) choose to compile it yourself and so control the version in use.  
Going with this choice, you have some further options: 
- Compile it within a stand-alone command-line application. The source for this is also provided and named "the Sqlite CLI". This is a stand-alone program using the SQLite Engine of whatever version was represented by the code you compiled it with.  
- Compile it as a Library (.so/.dll/etc.) which you can mostly swap for the libraries used by some other software (i.e. control what version they use) like a ODBC driver or such.
- Roll your own. Download the free and open-source source of SQLite for the latest stable/release version (or newer trunks if you like) and compile it into your project directly (it's just C code - see link below).  
- Lastly you have the option in specifically the case of System.Data.Sqlite or the dynamic libraries, to [download from the SQLite site](https://sqlite.org/download.html), pre-compiled binaries of the latest versions.

Do you see the trend here? In every case you either need to "BUILD" it or "DOWNLOAD THE PRE-BUILT THING".

Most of the things I mentioned above (ODBC drivers, other software, etc.) come with their selected version "compiled-in" at the time they were compiled. That is the version you are stuck with if you choose to programmatically use that thing. If you want better, roll your own - [Instructions can be found by clicking here](https://sqlite.org/howtocompile.html).

Lastly, all of the above are very basic information (which most people reading it here are probably bored with and stopped reading several lines ago) and none of it were mentioned on this thread before, because this is not a "Learn to program" forum (and I will probably get flamed for "feeding the animals"), but you seem to be genuinely confused by these concepts, so I figured in the spirit of "answering the original question" I would elaborate this time.

One could probably keep a bunch of versions of the amalgamation code somewhere, along with a compiler, then programmatically decide which to compile into a library and then link against that library, or just keep a library of every version and programmatically decide which to link to... so you could "technically" maybe "programmatically" select which version to use in that way, and it is probably what some test suites do, or at least the method of finding/dissecting to the version that first caused a bug, may use.  
I'm however confident this is not the OP's use-case.