Click here to Skip to main content
Click here to Skip to main content

Embedded Firebird: Full-Featured Embedded Database with 2 MB Runtime

By , 28 Jan 2005
 

Sample Image - screenshot.gif

The advantages of Embedded Firebird

Firebird is a database with 20 years of history, full set of features (including transactions, stored procedures, hot-backup, excellent scalability, etc.) and a friendly open source license. It is an overlooked but compelling alternative to Microsoft Jet and Microsoft MSDE 2000/SQL Express 2005. Let's take a look at how it can be used embedded in your desktop application. What makes Embedded Firebird ideal for embedding:

  • The embedded runtime is < 2 MB (starting at just one DLL + one .NET assembly). The runtime is deployed by simple copying, no installation or component registration is required.
  • The database file (it's just a single file) can have any name and extension. You can associate the extension with your application.
  • The migration to a standalone server couldn't be easier. Just copy the database file to the server and change a connection string on your client.

Working with Embedded Firebird

To start using Embedded Firebird in .NET, you need to download:

  • Embedded Firebird Engine (current stable version is 1.5.2)
  • Firebird ADO.NET Provider (current stable version is 1.6.3)

After creating a new project in Visual Studio .NET, add a reference to FirebirdSql.Data.Firebird.dll (from Firebird ADO.NET Provider installation), and copy fbembed.dll (from Embedded Firebird ZIP package) to the project output directory (e.g., bin/Debug).

The Firebird ADO.NET Provider can connect to a standalone Firebird Server using a connection string like this:

FbConnection c = new FbConnection("ServerType=0;User=SYSDBA;" + 
         "Password=masterkey;Dialect=3;Database=c:\\data\\mydb.fdb");

It can connect to an embedded Firebird using this connection string:

FbConnection c = new FbConnection("ServerType=1;User=SYSDBA;" + 
                 "Password=masterkey;Dialect=3;Database=mydb.fdb");

The database path can be relative to fbembed.dll when using the Embedded Firebird.

You see that switching from embedded and standalone Firebird and vice versa is a piece of cake.

Creating a new database

There are two ways to create a new database:

  • Creating a database programmatically.
  • Copying an existing database template.

It's up to you which way you choose. Copying an existing database is easy (just make sure the template is not open before copying), so let's try to create it programmatically.

Hashtable parameters = new Hashtable();
parameters.Add("User", "SYSDBA");
parameters.Add("Password", "masterkey");
parameters.Add("Database", @"mydb.fdb");
parameters.Add("ServerType", 1);
FbConnection.CreateDatabase(parameters);

Continue as usual

Working with Firebird ADO.NET Provider is easy. You will reuse your experience with other ADO.NET providers. It even has some nice features, like calling the stored procedures using the MSSQL style:

FbCommand cmd = new FbCommand("MYSTOREDPROCEDURE", 
            new FbConnection(connectionString));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@first", "value1");
cmd.Parameters.Add("@second", "value2");
cmd.Connection.Open();
try
{
    cmd.ExecuteNonQuery();
}
finally
{
    cmd.Connection.Close();
}

Useful Resources

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Dan Letecky
Czech Republic Czech Republic
Member
My open-source AJAX controls:
 
DayPilot
DayPilot MVC
DayPilot Java
Outlook-Like Calendar/Scheduling Controls

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionconnection to an asp.net erpmemberezekielokeyo18 Jul '12 - 19:08 
QuestionFor those of you who're interested to get it setup on 64 bit platform (plus create db/table/insert rows) [modified]memberdevvvy14 May '12 - 2:05 
Generalembedded firebird with c#.net(3.5) and vs2008membersaurabh.patil@hotmail.com19 May '10 - 22:12 
QuestionHow Maintain Firebird Embedded Connection Open!?!?!memberRafael Fernandes Brasil25 Aug '09 - 4:07 
QuestionStill Supported?memberJawz-X8 Sep '08 - 10:24 
AnswerRe: Still Supported?memberDr.Serdar12 Sep '08 - 12:35 
GeneralRe: Still Supported?memberJawz-X16 Sep '08 - 8:22 
Ahh, I see. I was looking at the wrong pages. How confusing. WTF | :WTF:
 
Anyway, I actually decided to go with SQLite for my project. Same concept but so far support has been better for it. Plus, I'm too deep in now to switch back. Laugh | :laugh:
 
Thank you for your reply and the information!
 
Regards,
Frank
Generaldoesn't work for firebird 2memberujal17 Aug '08 - 21:10 
QuestionProblems with Stored Procedures with Embedded Firebird 2.0memberkiweed17 Jan '08 - 7:13 
QuestionHelpmemberK_Farhod17 Sep '07 - 22:46 
AnswerRe: Helpmember_CloudyOne_5 Jun '08 - 14:01 
QuestionDLL Not Foundmemberjet858 May '07 - 7:31 
AnswerRe: DLL Not Foundmembertcdavis9 May '07 - 6:06 
GeneralRe: DLL Not Foundmemberjet8510 May '07 - 9:04 
GeneralRe: DLL Not Foundmembertcdavis10 May '07 - 9:14 
GeneralRe: DLL Not Foundmemberbalazs_hideghety16 Jul '07 - 3:41 
GeneralRe: DLL Not FoundmemberDaberElay31 Jan '09 - 10:55 
Generalnot managedmemberAndrew Shapira4 Feb '07 - 3:11 
QuestionChange the password?memberIsmok15 Jan '07 - 15:39 
AnswerRe: Change the password?memberBalazs Zoltan16 Jan '07 - 21:27 
GeneralRe: Change the password?membertransoft8 Sep '09 - 9:02 
GeneralRe: Change the password?memberTrinh Tuan4 Sep '10 - 16:30 
AnswerRe: Change the password? [modified]memberdevvvy15 May '12 - 14:55 
QuestionHelp Help HelpmemberLinXG28 Nov '06 - 14:06 
AnswerRe: Help Help HelpmemberArgoDragon4 Dec '06 - 15:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 28 Jan 2005
Article Copyright 2005 by Dan Letecky
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid