そもそも、ファイルオープン時にファイル名まで
わざわざIntPtrにしてマーシャリングかけてるのが訳分からん。

sqlite3.cs 76 行目
private static extern int sqlite3_open(IntPtr filename, out IntPtr db);
を
private static extern int sqlite3_open(string filename, out IntPtr db);

sqlite3.cs 578 行目
int res = sqlite3_open(m.GetSQLiteStr(),out DB);
を
int res = sqlite3_open(filename,out DB);

でいいような気もする。