public static int sqlite3_prepare_v2(
            DatabaseHandle db,
            string zSql,
            out StatementHandle ppStmt,
            out string pzTail)
        {
            int nByte;
            var zSqlPtr = MarshalEx.StringToHGlobalUTF8(zSql, out nByte);

            try
            {
                IntPtr pzTailPtr;
                var    rc = sqlite3_prepare_v2(db, zSqlPtr, nByte, out ppStmt, out pzTailPtr);
                pzTail = MarshalEx.PtrToStringUTF8(pzTailPtr);

                return(rc);
            }
            finally
            {
                if (zSqlPtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(zSqlPtr);
                }
            }
        }
        public static string sqlite3_db_filename(DatabaseHandle db, string zDbName)
        {
            var ptr = MarshalEx.StringToHGlobalUTF8(zDbName);

            try
            {
                return(MarshalEx.PtrToStringUTF8(sqlite3_db_filename(db, ptr)));
            }
            finally
            {
                if (ptr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(ptr);
                }
            }
        }
        public static int sqlite3_open_v2(string filename, out DatabaseHandle ppDb, int flags, string zVfs)
        {
            var filenamePtr = MarshalEx.StringToHGlobalUTF8(filename);
            var zVfsPtr     = MarshalEx.StringToHGlobalUTF8(zVfs);

            try
            {
                return(sqlite3_open_v2(filenamePtr, out ppDb, flags, zVfsPtr));
            }
            finally
            {
                if (filenamePtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(filenamePtr);
                }
                if (zVfsPtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(zVfsPtr);
                }
            }
        }
        private void ReleaseNativeObjects()
        {
            if (_handle == null
                || _handle.IsInvalid)
            {
                return;
            }

            _handle.Dispose();
            _handle = null;
        }
 public static extern int sqlite3_changes(DatabaseHandle db);
 private static extern int sqlite3_prepare_v2(
     DatabaseHandle db,
     IntPtr zSql,
     int nByte,
     out StatementHandle ppStmt,
     out IntPtr pzTail);
 private static extern int sqlite3_open_v2(IntPtr filename, out DatabaseHandle ppDb, int flags, IntPtr zVfs);
 private static extern IntPtr sqlite3_db_filename(DatabaseHandle db, IntPtr zDbName);
        public static int sqlite3_prepare_v2(
            DatabaseHandle db,
            string zSql,
            out StatementHandle ppStmt,
            out string pzTail)
        {
            int nByte;
            var zSqlPtr = MarshalEx.StringToHGlobalUTF8(zSql, out nByte);
            try
            {
                IntPtr pzTailPtr;
                var rc = sqlite3_prepare_v2(db, zSqlPtr, nByte, out ppStmt, out pzTailPtr);
                pzTail = MarshalEx.PtrToStringUTF8(pzTailPtr);

                return rc;
            }
            finally
            {
                if (zSqlPtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(zSqlPtr);
                }
            }
        }
 public static extern int sqlite3_changes(DatabaseHandle db);
 private static extern int sqlite3_prepare_v2(
     DatabaseHandle db,
     IntPtr zSql,
     int nByte,
     out StatementHandle ppStmt,
     out IntPtr pzTail);
 public static int sqlite3_open_v2(string filename, out DatabaseHandle ppDb, int flags, string zVfs)
 {
     var filenamePtr = MarshalEx.StringToHGlobalUTF8(filename);
     var zVfsPtr = MarshalEx.StringToHGlobalUTF8(zVfs);
     try
     {
         return sqlite3_open_v2(filenamePtr, out ppDb, flags, zVfsPtr);
     }
     finally
     {
         if (filenamePtr != IntPtr.Zero)
         {
             Marshal.FreeHGlobal(filenamePtr);
         }
         if (zVfsPtr != IntPtr.Zero)
         {
             Marshal.FreeHGlobal(zVfsPtr);
         }
     }
 }
 private static extern int sqlite3_open_v2(IntPtr filename, out DatabaseHandle ppDb, int flags, IntPtr zVfs);
 public static string sqlite3_db_filename(DatabaseHandle db, string zDbName)
 {
     var ptr = MarshalEx.StringToHGlobalUTF8(zDbName);
     try
     {
         return MarshalEx.PtrToStringUTF8(sqlite3_db_filename(db, ptr));
     }
     finally
     {
         if (ptr != IntPtr.Zero)
         {
             Marshal.FreeHGlobal(ptr);
         }
     }
 }
 private static extern IntPtr sqlite3_db_filename(DatabaseHandle db, IntPtr zDbName);