コード例 #1
0
 public EncryptedSQLiteDb(string db_filename)
 {
     if (SQLiteNativeMethods.sqlite3_open16(db_filename, out _db) != SQLITE_OK)
     {
         throw new ApplicationException("Failed to open database " + db_filename);
     }
 }
コード例 #2
0
 private void FinalizeStatement(IntPtr statement)
 {
     if (SQLiteNativeMethods.sqlite3_finalize(statement) != SQLITE_OK)
     {
         throw new ApplicationException(ErrMsg());
     }
 }
コード例 #3
0
        public void ExecuteUpdate(string query, params string[] args)
        {
            IntPtr statement = PrepareStatement(query, args);

            try {
                if (SQLiteNativeMethods.sqlite3_step(statement) != SQLITE_DONE)
                {
                    throw new ApplicationException("Execute update result not DONE: " + ErrMsg());
                }
            } finally {
                FinalizeStatement(statement);
            }
        }
コード例 #4
0
        private IntPtr PrepareStatement(string query, params string[] args)
        {
            IntPtr statement;

            if (SQLiteNativeMethods.sqlite3_prepare16_v2(_db, query, query.Length * 2, out statement, IntPtr.Zero) != SQLITE_OK)
            {
                throw new ApplicationException(ErrMsg());
            }

            for (int i = 1; i <= args.Length; i++)
            {
                string arg = args [i - 1];
                if (SQLiteNativeMethods.sqlite3_bind_text16(statement, i, arg, arg.Length * 2, -1) != SQLITE_OK)
                {
                    throw new ApplicationException(ErrMsg());
                }
            }

            return(statement);
        }
コード例 #5
0
        public DataTable ExecuteQuery(string query, params string[] args)
        {
            IntPtr statement = PrepareStatement(query, args);

            DataTable result = new DataTable();

            try {
                int column_count = SQLiteNativeMethods.sqlite3_column_count(statement);

                for (int i = 0; i < column_count; i++)
                {
                    IntPtr col_name = SQLiteNativeMethods.sqlite3_column_origin_name16(statement, i);
                    result.Columns.Add(UniPtrToString(col_name), typeof(string));
                }

                while (SQLiteNativeMethods.sqlite3_step(statement) == SQLITE_ROW)
                {
                    string[] row = new string[column_count];

                    for (int i = 0; i < column_count; i++)
                    {
                        if (SQLiteNativeMethods.sqlite3_column_type(statement, i) != TypeAffinity.Text)
                        {
                            throw new ApplicationException(String.Format("Column {0} is not string", i));
                        }
                        IntPtr val = SQLiteNativeMethods.sqlite3_column_text16(statement, i);
                        row [i] = UniPtrToString(val) ?? "";
                    }

                    result.Rows.Add(row);
                }
            } finally {
                FinalizeStatement(statement);
            }

            return(result);
        }
コード例 #6
0
        private string ErrMsg()
        {
            IntPtr msg_ptr = SQLiteNativeMethods.sqlite3_errmsg16(_db);

            return(UniPtrToString(msg_ptr) ?? "");
        }