FireDac的的初步2
FireDac和UniDac一样了,也支持所谓的连接池,但是限制比较多。
要支持连接池,必须让FDManager连管理,也就是,必须:1,FDConnectionDefs.ini在定义一个连接,2,必须FDConnection的Params必须是空的。第二个条件比较容易理解,因为要是不同的FDConnection指定了不同的连接参数,那么连接池里面的连接属性肯定需要不一样才行。第一个条件就比较恶心了,莫非都得需要这个配置文件才可??岂不是App都要带一个这个FDConnectionDefs.ini?? 仔细看了这里 发现可以定义FireDAC supports 3 connection definition kinds:的Private类型也可以只是Pool。 代码如下了
这样就可以定义一个 Private的连接了
另外,看了文档,也明白了,连接定义FDConnectionDefs.ini的名字可以自己起,然后设置上 FDManager的ConnectionDefFileName就可以,这样还灵活一点点。 这个【Private】的意思,没看明白,因为就算【Persistent】也肯定是不能跨Exe来Pool的。 连接池的使用,直接定义一个conn,然后设置
启动了pool后,conn的close也不是真的close,只是还给pool。 当超过
POOL_MaximumItems定义的值时,conn的发起连接时就会报异常了。
监视oracle会发现有两个连接连接上了。
另外连接池和
FDManager.AcquireConnection
FDManager.ReleaseConnection
一分钱关系都没有
FireDAC的初步1
把AnyDac买进来后,Embarcadero重新起了个名字叫FireDAC,以前用RO时挂过AnyDAC,当时觉得deploy程序的时候,配置太繁琐了,也一直没用,因为有UniDAC的存在,AnyDac的确是既生瑜何生亮。选择UniDac的另一个原因是,UniDac对Oracle的Direct连接,不需要套Oracle客户端dll,deploy时真的时方便又快捷。 UniDac是要钱的,打算再次摸一摸FireDac,做个笔记,记录一下。另外老被吹嘘的dbExpress也算是寿终正寝了。目前FireDac的Driver是不支持DataSnap的,估计dbExpress还会保留一段时间。 基本上,我都是用Oracle,所以比较关心without oracle client的数据库连接是否能做到。 测试了几下,FireDac连接Oracle,在没有Oracle Client的情况下,是可以连接上的。方式是 前提:需要文件 oci.dll oraocci11.dll oraociei11.dll orasql11.dll 这几个文件,可以放在exe同一个目录下,或者path里面能找到得到的地方。有了这4个文件,就可以连接oracle了 具体参考了这个 我不喜欢tnsname.ora的配置,因为需要外挂一个配置文件。还是Oracle easy connect string方式来的最简单直接,形式如 OraSrv:1521/orcl ,这个就和UniDac的Direct连接时指定(OraSrv:1521:orc)差不多了。 |
|