Queries across databases
I am using SQLite3.DLL with C# (Windows).
How do I achieve
sqlite> attach database 'c:/sqlite/db/contacts.db' as contacts;
In other words, what should be the second parameter of sqlite3_exec to attach a database?
Have you tried that same SQL, as the C# literal "attach database 'c:/sqlite/db/contacts.db' as contacts"? And if not, why not? If the shell which is published by this project (and produces "sqlite> " as its prompt) accepts your SQL, you can be reasonably sure that SQLite3.DLL will accept it (or should if it is built with this project's source.)
Going beyond your posed question: How are you "using SQLite3.DLL with C#"? That DLL does not present an interface easily used from C#, and the substantial work necessary to use it that way creates many learning opportunities. So if you have tried the obvious 2nd argument to sqlite3_exec() without success, you will need to provide much more detail before you can reasonably hope for help here.
The SQL for it is simply:
ATTACH DATABASE 'c:/sqlite/db/contacts.db' AS contacts; and in program terms: sqlite3_exec(pdb, "ATTACH DATABASE 'c:/sqlite/db/contacts.db' AS contacts;" ... );
Which should all already work according to your given example, but note that:
- attaching has to be allowed by your version of SQLite (or C# wrapper for it),
- there are limits to how many DBs can be attached,
- you need read/write privileges to the folder of the file you are attaching,
- and to the DB file itself. (Depending on the Journal mode and intended use.)
To get rid of it again you can do:
DETACH DATABASE contacts;
We've been here! I am loading SQLite3.DLL dynamically in C#. Reasons:
- Available wrappers and drivers are statically linked to one or another historical version of SQLite3.
- I want to be able to choose the version of SQLite3 that I use; I can keep SQLite3.EXE and SQLite3.DLL in sync.
- There are (were) several versions of SQLite3 on my computer even before I started.
When I started (v 3.34 I think), I could
.read ' "D:/SQLite32/SCRIPTS/Techniques/N Random Records.BAT" tblSalesRevenue 10'
N Random Records.BAT has:
echo SELECT * FROM [%1] ORDER BY RANDOM() LIMIT %2;
I wanted to be able to use all the math functions without loading extensions.
The SQLite3.DLL APIs aren't easy to start with; however, with perseverance, the insights gleaned from this forum and other online resources, it all falls into place quite readily.
ATTACH DATABASE 'c:/sqlite/db/contacts.db' AS contacts;
I am certain that I tried this before posting. (!! did I have SELECT as a prefix !!) Thanks for the help ...
sqlite3_exec(pdb, "ATTACH DATABASE 'c:/sqlite/db/contacts.db' AS contacts;" ... );
.. is what I need (works).
there are limits to how many DBs can be attached,
I understand that the default number is 10 but that it would be 125: correct?