The database decimal point problem is entirely due to using string substitution instead of prepared statements. This is also why we can't use single quotes in names. VB Aurora did the same thing, though in fairness I don't recall if Access even supported prepared statements or not.
It is a pity that C# doesn't seem to support Python prepared statement semantics. For comparison this is the Python equivalent of my previous example:
with apsw.Connection('database.sqlite') as db:
db.cursor().executemany('INSERT INTO table1 (foo, bar, bin, baz) VALUES (?, ?, ?, ?);',
((row.foo, row.bar, row.bin, row.baz) for row in data1))
db.cursor().executemany('INSERT INTO table2 (foo, bar, bin, baz) VALUES (?, ?, ?, ?);',
((row.foo, row.bar, row.bin, row.baz) for row in data2))