1. Loading an external library depends on the SQLite-library-in-use and controlling interface allowing it - [this may or may not be the case](https://sqlite.org/c3ref/enable_load_extension.html) for the ODBC library in use. 2. I did not realize opening a DB in read-only mode is possible via ODBC, for me that is an API function and I do not use ODBC - so stand corrected on this. 3. Prevent the Creation of a New DB File? That's impossible via ODBC, and even if you could prevent your OS from creating a specific file, why would you ever want to do that? You may of course mean that you can give an option to fail when a file doesn't exist rather than creating a new one, which is fine but moot - so can the API. 4. CLI? Nobody is talking about the CLI, I'm comparing using ODBC vs. Wrappers like System.Data.SQLite vs. using the API directly - which most assuredly [can do it](https://sqlite.org/c3ref/create_function.html). When speaking about the CLI specifically, that is whole other interface and cannot form part of your program (like ODBC or the Wrappers), it also cannot do (some of) the custom things I'm pointing out, but it comes with a host of dot commands that can do things the ODBC definitely cannot. (Read up on that - the list is too long to post). 5. While we are at it, and since you seem to be interested in-depth of what can and cannot be done, here are some more things you can definitely not do in ODBC: - Create a Virtual-Table Mechanism module - Create a VFS (virtual file-system) to use - though this shouldn't be needed - Create a custom data Collation - Change the configured Query [limits](https://sqlite.org/c3ref/limit.html) - Use an [Authorizer](https://sqlite.org/c3ref/set_authorizer.html) to check/allow/disallow queries - Get an SQLite process error-log - Use a different, perhaps platform-specific-faster memory allocator - Set a custom busy-handler to handle concurrent access in a preferred way - Set a custom progress handler to show query progress/activity - Add pre-update code hooks... And more, but I'm stopping here - this is enough for now. I'd like to add that these questions are really not for the forum. There are documentation for all this and tutorials and lots of research on the internet you should get into when deciding what you want to do. Us copying and pasting info from the documentation because you are finding asking easier than reading up is really not why this exists. You are trying to use this like social media now, by asking for OPINIONs and then when we show that opinions don't count, only what you want to achieve, perhaps with minimal examples to make the point, you start arguing the very off-the-point validity of the examples and analogies, like the Drill-Chord or what you are able to do via ODBC - i.e. you start getting into documentation territory. Please read the material available, do the research, if you read something in the documentation that you do not understand (and we are happy for that to include a wide variety of things), or if you run into a use-case or problem that is not documented, then please ask here for clarity - that's what this forum does exist for and, I might add, does really well. PS: I'm pretty sure this post took me twice more time to make than the combined time all your questions took to type - to say nothing of the combined time of all the answers from all the other posters. We don't mind the effort, but would like the content to be relevant/helpful to everyone reading.