More CE database Q&A

Posting some questions I received from my blog.

1. You mentioned the that the maximum size of an object store is 256MB. Which versions of Windows CE does this apply, Windows Mobile 2003, Pocket PC 2002?

It applies to all versions of Windows CE.

2. Do the limitations of database in the object store apply to databases created in the filesystem?

Databases in the object store cannot exceed CEDB_MAXNUMRECORDS (=64K) records. Database volumes (files containing databases) cannot exceed 16MB and the databases inside those volumes still cannot exceed CEDB_MAXNUMRECORDS records.

3. Is there a maximum size of a database record in an Object Store? If yes what is it?

4. Is there a maximum size for a field in a database record? If yes what is it?

For both the object store and database volume files, one record cannot have more than CEDB_MAXRECORDSIZE bytes (=128KB), and one property value cannot exceed CEDB_MAXPROPDATASIZE bytes (a little short of 64KB).

Be careful of the CEDB terminology difference compared to other database engines: A CEDB "database volume" is a "database" to other engines, and a CEDB "database" is a "table" to other engines. The database volumes were created to let you store your data in a file instead of in the object store, so you can think of the object store as just a special-case "default" database volume.

If you are running into these size limitations, you are probably far better off with SQL-CE than CEDB. Or with a new offering (as of CE 5.0), EDB, which is a trimmed-down version of SQL that presents a programming interface very similar to CEDB for easy porting. CEDB has very poor performance once you go over ~1000 records.