views:

903

answers:

7

I'm looking for embedded database engine supporting isolating storage. Currently I'm aware of VistaDB. What else you can recommend?

Requirements are pretty simple:

  • xcopy deployment
  • support for isolated storage
  • preferably free

Note that you don't know exact path to the file when using IS.

A: 

Sqlite is very much meant to be embedded and is free.

It doesn't directly support isolated storage, however it looks like it would be fairly straightforward to invoke the isolated storage API's yourself, and pass the generated filename to Sqlite as the filename it should use.

Lloyd
The whole point of IS is that you don't know actual path to the file
aku
@Lloyd: no idea why you were voted down, when you can infact get the filename to sqlite. Voted you back up.
sixlettervariables
sixlettervariables, Q clearly states "DB with Isolated Storage support" If you can prove me that one can use SQLLite with Isolated Storage I'll apologize and up vote or even choose to accept this answer.
aku
The same thing applies to Firebird.
Milan Babuškov
Seems to me the real question is how difficult would it be to add Isolated Stoarge to SQLLite. AFAIK, SQLLite requires a single pathname. Next, would be how to derive that single pathname from some IS abstraction, then ideally just plugging that in to the current SQLLite code base.
Will Hartung
A: 

You could do something like that with Firebird Embedded.
Although it does not natively support Isolated Storage, it should be pretty easy to create a new database for each user.

Douglas Tosi
+1  A: 

Following on from Lloyd's answer, there is a wrapper library for sqlite called uSqlite that should achieve what you're after, either directly or with minimal alteration.


To elaborate (for Aku's followup question) I would suggest modifying the uSQLstPoll() routine (contained in uSQLst.c). At this stage you have the port and address information from the client connecting to you (contained in the sockaddr). On the basis of that information you can modify the uSQLst structure, to modify the filename of the local database file that you're connecting to.

Disclaimer: Note that this is a possible solution based on little investigation. A more thorough investigation is suggested before deploying.

Andrew Edgecombe
+2  A: 

@Andrew Edgecombe,

Lloyd's answer is incorrect. SQLite has no support for Isolated Storage. You will need to rewrite it to add support for IS.

From the link you gave me:

uSQLite is a network wrapper for SQLite. It turns SQLite into an RDBMS but puts the emphasis on the 'Lite'

How can it help me?

I suspect that I just don't see some obvious thing.

Can you please clarify me how I can get support for IS "either directly or with minimal alteration" ?

aku
+1  A: 

VistaDB seems to have support for isolated storage. I've been using it for nearly a year now and am very happy with it all round.

It's not free but its pricing starts at $60USD for version 4 (very soon to be released). There is a free Express Edition but this is for non-commercial projects only.

Sean Kearon
Hah - just noticed that you asked this in September a year ago - d'oh! Hope you've found a solution by now :) !!
Sean Kearon
AFAIK Sean VistaDB is still the only embedded SQL database engine that support isolated storage... So I think your answer is still a good one.
Jason Short
A: 

I know this question is pretty old, but VistaDB DOES support Isolated Storage and is XCopy deployable. We do not have a free version though, it is a commercial product.

Take a look at the SO post on Advantages of VistaDB for more information about other things we support.

Isolated storage support is much more than just not knowing your filename. You have to work with streams, you have to NOT require file level locking, you can't create temp files in the same path, you have to understand UAC and space limitations.

AFAIK VistaDB is the only embedded sql database to support Isolated Storage.

Jason Short
Yeah, it seems that VistaDB is the best choice. I've tried it in several projects and it was a very nice experience.
aku
A: 

You can try siaqodb .Siaqodb is real Silverlight client side object database, you can store an object with just one line of code and retrieve back objects via LINQ.For more info take a look at http://siaqodb.com

sqo