最近在学习 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-04-18 12:27:00 | Tag:暂无标签
留言反馈
Berkeley DB 是不错。不过它的 Licence 不适合作开发。
Berkeley DB 有两套授权机制,一种是开源协议,适合做开源软件或内部使用软件;一种是商业协议,适合做商业软件。简言之,除非你做的是开源软件,否则,Berkeley DB 不是免费的。
Berkeley DB is distributed under a dual licence. An open source licence is available for open source and internal use projects. A commercial licence is available for redistributing Berkeley DB within proprietary products. Sleepycat also provides world-class support, consulting and training services.
你只要能拿到他的文件,再安装个fireBird,就可以随意查看了,真是没劲。
我看,比ms access还裸。
试验中……
看能否并发连结……
最后找到的是Firebird Embedded Database,试用了一下很不错,单文件发布,不需安装,有密码保护,真是很理想。
不过最后客户让我们放弃了Firebird,理由:1.项目在客户端没有太多数据要加密;2.担心开源项目将来没有人维护(这个我觉得完全是杞人忧天,倒是商业软件半路甩手的见过不少);3.最关键的,对开源软件的质量不放心,看来某些FUD观念很是深入人心啊……
最后还是用了Access,里面对敏感数据加密。
如果你有主机的管理权限,这事好办,
我说了第二方案只是给没有管理权限的用户用的。
对。默认是从 PATH 指定的目录中搜索 fbembed.dll,
改一下,让它从别的地方搜索。
你是指Firebird .net驱动吗?
我试过了,是可以的,是两个 dll。
一个方案是,把 fbembed.dll 放在 C:\windows\system32 等系统 PATH 指定的路径下。托管的那个 dll 放在你的 bin 目录中就可以了。
另一个方案是:稍微修改一下托管的源码,可以不用把 fbembed.dll 放在 C:\windows\system32 这样的敏感目录中,放在一般的目录,比如:可以和托管的 dll 放在一起。(我过些日子,改一下,发布出来)
前一方案适于自己是主机的管理员,操作主机比较方便;后一方面适于没有操作主机敏感目录的权限,比如使用虚拟主机的用户。
>>>请教一下关于“一个数据库连接”的依据?
>>>我这里简单测试了一下,是可以同时打开两个连接的。
哦,是我没说清楚 ,Embedded Firebird打开数据库时,是采用独占文件打开的,不能同时有第二个进程打开,这样,如果我发布程序时,就必须限制我的程序只能有一个实例在运行!
至于在ASP.NET中,我没试过多个连接的情况,不过,好像是支持连接缓冲池的!
如果在ASP.NET环境中,也可以发布一个DLL文件的情况下部署embedded firebird,那就爽了!
妈的,,用Access牵扯到知识产权的问题,妈的,,用MSDN就要在客户那儿安全,太麻烦了!
请教,在那儿可以下载啊!
另外,ADO.NET支持不支持也是担心的问题。
独占模式就更不敢奢望了。。。
请教一下关于“一个数据库连接”的依据?
我这里简单测试了一下,是可以同时打开两个连接的。
string connectionString = @"....";
FbConnection c1 = new FbConnection(connectionString);
FbConnection c2 = new FbConnection(connectionString);
c1.Open();
c2.Open();
c1.Close();
c2.Close();
没什么问题的。
它被设计用于客户端程序(比如Windows Forms)中,并非诸位所期望的 asp.net 服务器环境中。
SuperServer 需要安装才能使用。
另外,Embeeded版本,只能有一个数据库连接,感觉在ASP.NET里不太合适
另外它的SQL语法基本上是符合ANSI92标准的,和MS的T-SQL还是有不少差别的,但个人觉得和Oracle的PL/SQL相比,它还是比较接近MS的。当然Firebird的SQL看起来更接近MySQL,因为它们都比较符合ANSI标准。