Embedded Firebird DB 简介
最近在学习 Firebird Embeded Database。作为一款单文件型小型数据库,Firebird 具有很多吸引人的特征,比如支持事务、支持存储过程、触发器等,而且 Embeded 版本的 Firebird 在 .NET 开发中只需要拷贝两个文件:一个 fbembed.dll (非托管但不需要注册的动态链接库)和一个 ADO.NET Data Provider 的 FirebirdSql.Data.Firebird.dll。这些特征都非常适合那些需要在客户端存储一些数据,但又不想安装数据库(比如MSDE)软件的情形。
据称,在国外,需要使用客户端数据库的情况中,有30%左右的开发者选择Access,有30%的开发者选择MSDE 2000,有30%的开发者选择Embedded Firebird,剩余10%选择其他小型数据库,如SQLite,MySQL 等。
上面所说的Access,MSDE 2000,Embedded Firebird,SQLite等都是可以免费再分发(free redistributable)的数据库。相比而言,MSDE 2000 显著缺点是需要安装,最大优点是和服务器端的 SQL Server 编程模型一致,开发便利。Access的显著缺点是功能较少,不支持事务等常用功能,最大优点是简单、多数开发者都很熟悉,部署也很方便。SQLite支持事务,也是一款单文件数据库,比较不足的是 .NET Data Provider 还不是很成熟。Firebird则同时具有:单文件、部署简单不需安装(只需 XCOPY 两个文件)、支持事务、存储过程、触发器,.NET Data Provider比较稳定成熟等优点。
Firebird 本身有SuperServer和Embedded版本之分,后者只能本机访问,不接受TCP连接。对于开发者而言,从Embedded数据库切换到SuperServer,只需更改数据库连接串中的ServerType值就行。
但是,在你正式决定使用?Firebird 之前,请你注意下面这个 known issue(已知问题): Firebird 数据库文件不能放置在含有中文等字符的路径中。Firebird 的文件名不可以用中文字符,所在路径的任何部分如果含有中文字符,都将无法访问到数据库。举个例子,中文Windows桌面所在的目录一般是“C:\Documents and Settings\用户名\桌面”,如果数据库文件放置在桌面上,就无法访问到。当然,Firebird 内部是可以存储中文字符的,因为它支持 GB2312 和 UNICODE 等字符集。
我已向 Firebird 开发者报告了这个 BUG,希望能早日解决这个 BUG。
需要注意一点,连接串中的 Database 地址如果使用相对路径,请一定注意这个相对路径是相对于 fbembed.dll 所在目录的。
发表于 2005年4月18日 12:27
评论
# re: Embedded Firebird DB 简介
阅,希望今后再多介绍几款这样的小型数据库!:)
2005-4-18 12:59 | Cavingdeep
# re: Embedded Firebird DB 简介
Well, 写sp的语法和sql server差别不小,不过还是值得学习;)
2005-4-18 15:28 | rIPPER
# re: Embedded Firebird DB 简介
我感觉我最看重的还是“支持事务”和“部署简单”这些特征。作为客户端的数据库,可能这两条还是很重要的。
另外它的SQL语法基本上是符合ANSI92标准的,和MS的T-SQL还是有不少差别的,但个人觉得和Oracle的PL/SQL相比,它还是比较接近MS的。当然Firebird的SQL看起来更接近MySQL,因为它们都比较符合ANSI标准。
2005-4-18 15:35 | 破宝
# re: Embedded Firebird DB 简介
其实,DBISAM也不错,只不过只支持Delphi/BCB开发环境
2005-4-18 20:15 | 古月春秋
# re: Embedded Firebird DB 简介
如果开发的是asp.net程序,那2个dll放在bin下面好像不行?不知道要放在哪里?
2005-4-19 9:37 | chuanzai
# re: Embedded Firebird DB 简介
可以在其他的OS下用吗?比如Windows CE?
2005-4-19 12:52 | aawolf
# re: Embedded Firebird DB 简介
CE不行,虽然有个CE平台的port,但是似乎非常不完善,不堪用。
2005-4-19 13:57 | rIPPER
# re: Embedded Firebird DB 简介
fbclient.dll 只要放到程序可以找到的目录就行了,没有试过放到bin目录里行不行
另外,Embeeded版本,只能有一个数据库连接,感觉在ASP.NET里不太合适
2005-4-19 17:31 | 雨中漫步
# re: Embedded Firebird DB 简介
“支持事务”和“部署简单”的确是最大的诱惑力,但要是Embeeded版本,只能有一个数据库连接,就不那么好用了。不知道SuperServer版本是不是依然部署简单,而且支持多连接呢
2005-4-20 15:53 | simonw
# re: Embedded Firebird DB 简介
它起名叫做 Embeded,就说明了它的定位,
它被设计用于客户端程序(比如Windows Forms)中,并非诸位所期望的 asp.net 服务器环境中。
SuperServer 需要安装才能使用。
2005-4-20 15:56 | 破宝
# re: Embedded Firebird DB 简介
to 雨中漫步, simonw:
请教一下关于“一个数据库连接”的依据?
我这里简单测试了一下,是可以同时打开两个连接的。
string connectionString = @"....";
FbConnection c1 = new FbConnection(connectionString);
FbConnection c2 = new FbConnection(connectionString);
c1.Open();
c2.Open();
c1.Close();
c2.Close();
没什么问题的。
2005-4-20 16:31 | 破宝
# re: Embedded Firebird DB 简介
不错,可以考虑代替 Access 做 SmartClient 的 Client Data Caching。
2005-4-21 15:10 | upto
# re: Embedded Firebird DB 简介
单文件型小型数据库, 我也是用MDB的。 最关心是它的加密强度,像ACCESS那些密码随便就让人破解了,简直是裸奔!
另外,ADO.NET支持不支持也是担心的问题。
独占模式就更不敢奢望了。。。
2005-4-21 15:31 | timiil
# re: Embedded Firebird DB 简介
对,,这样就非常适合,做SmartClient的客户端数据保存呢!
妈的,,用Access牵扯到知识产权的问题,妈的,,用MSDN就要在客户那儿安全,太麻烦了!
请教,在那儿可以下载啊!
2005-4-21 22:35 | 大虫II世
# re: Embedded Firebird DB 简介
to 破宝:
>>>请教一下关于“一个数据库连接”的依据?
>>>我这里简单测试了一下,是可以同时打开两个连接的。
哦,是我没说清楚 ,Embedded Firebird打开数据库时,是采用独占文件打开的,不能同时有第二个进程打开,这样,如果我发布程序时,就必须限制我的程序只能有一个实例在运行!
至于在ASP.NET中,我没试过多个连接的情况,不过,好像是支持连接缓冲池的!
如果在ASP.NET环境中,也可以发布一个DLL文件的情况下部署embedded firebird,那就爽了!
2005-4-22 9:48 | 雨中漫步
# re: Embedded Firebird DB 简介
to 雨中漫步 :
我试过了,是可以的,是两个 dll。
一个方案是,把 fbembed.dll 放在 C:\windows\system32 等系统 PATH 指定的路径下。托管的那个 dll 放在你的 bin 目录中就可以了。
另一个方案是:稍微修改一下托管的源码,可以不用把 fbembed.dll 放在 C:\windows\system32 这样的敏感目录中,放在一般的目录,比如:可以和托管的 dll 放在一起。(我过些日子,改一下,发布出来)
前一方案适于自己是主机的管理员,操作主机比较方便;后一方面适于没有操作主机敏感目录的权限,比如使用虚拟主机的用户。
2005-4-22 10:01 | 破宝
# re: Embedded Firebird DB 简介
稍微修改一下托管的源码?
你是指Firebird .net驱动吗?
2005-4-22 10:24 | 雨中漫步
# re: Embedded Firebird DB 简介
to 雨中漫步:
对。默认是从 PATH 指定的目录中搜索 fbembed.dll,
改一下,让它从别的地方搜索。
2005-4-22 10:28 | 破宝
# re: Embedded Firebird DB 简介
那为什么不修改环境变量PATH的值呢?
2005-4-22 10:34 | 雨中漫步
# re: Embedded Firebird DB 简介
to 雨中漫步 :
如果你有主机的管理权限,这事好办,
我说了第二方案只是给没有管理权限的用户用的。
2005-4-22 10:37 | 破宝
# re: Embedded Firebird DB 简介
官方网站在
http://www.firebirdsql.org/
2005-4-22 12:57 | 于晓松
# re: Embedded Firebird DB 简介
hehe,我前几天也在寻找一个用做 SmartClient 的 Client Data Caching的单文件型数据库,Access加密强度不够(用上面朋友的话说,完全是在裸奔),放弃;SQLite不支持数据库加密,也只好放弃。
最后找到的是Firebird Embedded Database,试用了一下很不错,单文件发布,不需安装,有密码保护,真是很理想。
不过最后客户让我们放弃了Firebird,理由:1.项目在客户端没有太多数据要加密;2.担心开源项目将来没有人维护(这个我觉得完全是杞人忧天,倒是商业软件半路甩手的见过不少);3.最关键的,对开源软件的质量不放心,看来某些FUD观念很是深入人心啊……
最后还是用了Access,里面对敏感数据加密。
2005-4-22 19:01 | NetCobra
# re: Embedded Firebird DB 简介
前面提的都是通过.net访问,请问如果用java编程访问Embedded Firebird DB方便吗?
2005-5-18 10:58 | water
# re: Embedded Firebird DB 简介
access也是独占方式的。asp.net用firebird,我觉的还是用embed的好一些,如果用super的,那还不如用sql server.
试验中……
看能否并发连结……
2005-8-19 11:40 | bluesnow
# re: Embedded Firebird DB 简介
谁说“最后找到的是Firebird Embedded Database,试用了一下很不错,单文件发布,不需安装,有密码保护,真是很理想”的?
你只要能拿到他的文件,再安装个fireBird,就可以随意查看了,真是没劲。
我看,比ms access还裸。
2005-9-4 19:02 | ligb
# re: Embedded Firebird DB 简介
我希望能够找到一个加密强度大一点的单文件数据库。不知道还有什么好介绍?
2005-9-13 21:56 | 焦点人物
# re: Embedded Firebird DB 简介
我想问个东西,embedded能够承受100万左右的数据量?
2005-10-4 22:06 | wzw