views:

91

answers:

2

We have a "large" code base already developed using SQLite and NHibernate using .NET 2 for our clients. Using SQLite we can communicate with the db (even multiple clients) across a Windows file share. Most of the time, this is perfectly sufficient for what we need to do.

Over the last few months, we have needed to integrate our application with a much older application that is very niche, and runs on a custom built version of Windows - with a lot of things stripped out. No .NET, and we aren't "allowed" to use file shares. Now we have a problem.

We're looking for an embedded database system that can be dropped in for SQLite, using NHibernate, which could also be accessed using a client/server (the resulting code must be written in C).

In short:

  • Normal Usage could be with NHibernate and a local file (could be run as a service w/ client/server protocol)
  • Additional Usage would be with a C library in a client/server fashion

In many cases, we'll want to do both.

SQLite with a wrapper library was our first reaction, using SQLitening for example. Firebird may be an additional option. Some computers that we install onto may already have SQL Server running (I'm not sure about C support for SQL Server).

Any others (open source or commercial)?

+1  A: 

If you want really lightweight, I've found CodeBase (the isam) to be hightly efficient and easy to strip things out and relink.

Otherwise SQLite is what I've often used for portable applications (embedded linux, WinCE etc.) - in preference to Microsoft portable database options where applicable.

le dorfier
CodeBase doesn't seem to support NHibernate, but certainly has the C/C++ compatibility very well.
Anthony
A: 

check out http://www.h2database.com/

Yousui
This looks pretty solid for replacing most of SQLite, but doesn't appear to support a C/C++ API. Did I miss something?
Anthony
H2 does support ODBC (using a PostgreSQL driver). However, if you can't use .NET and Java then it's quite tricky. You could use Excelsior JET to create a native version, or GCJ, but both are not very common approaches. But I guess the main question is how do you convert you application from .NET to native?
Thomas Mueller