找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 3710|回复: 11

用VB.net访问Cache数据库。

[复制链接]
发表于 2003-4-9 20:52:16 | 显示全部楼层 |阅读模式
HL7V3DT的研究还没有完成,但为了不停止对Cache的学习,并听从乖乖兔版主的要求,我想先研究一下用VB.net访问Cache数据库。这跟HL7其实无关,但我还是想在这里发表,以集中我的有关Cache的学习内容。希望版主们同意,不将此贴移走。
 楼主| 发表于 2003-4-9 21:08:30 | 显示全部楼层

用VB.net访问Cache数据库。

VB.net访问Cache,主要是通过Cache的ActiveX界面实现的,Cache提供以下几个ActiveX控件来支技VB及其它编程工具的访问:
1.Cache Object Server(CacheObject.dll),它可以自动将Cache对象暴露为ActiveX对象。
2.Cache List控件是为VB写的主要用来的显示数据检索结果的。
3.Cache Query控件也是为VB写的,用来提供简单的界面在VB中向Cache执行SQL查寻。
4.Caché Object Form 向导也是为VB写的,用来快速从VB访问Cache类的属性。
 楼主| 发表于 2003-4-9 21:30:07 | 显示全部楼层

用VB.net访问Cache数据库。

1.通过CacheObject.dll(在安装目录\\bin下),客户端就可以得到一个与Cache服务端对象镜像的对象实例。但CacheObject.dll还提供了几个不是镜像到服务端对象的类:ObjInstance,Factory,SysList,ResultSet,BinaryStream,CharStream,这几个类我们直接可以创建,用来实现一些特殊的功能。因此,在VB.net中,首先要加入对CacheObject.dll的引用。
2.Factory是第一个需要创建的对象,因为我们通过他的Connect能够联接到Cache。具体联接的代码如下:
Dim factory as CacheObject.Factory
Dim connectstring As String
factory = CreateObject("CacheObject.Factory")
connectstring = factory.ConnectDlg()
factory.Connect(connectstring)
 楼主| 发表于 2003-4-9 21:45:31 | 显示全部楼层

用VB.net访问Cache数据库。

Factory还有以下很多方法:
1.连接:Connect,ConnectDLG,DisConnect,IsConnected,GetConnectList
2.SQL:dynamicSQL,TransactionCommit,TransactionLevel,TransactionStart,TransactionRollback
3.错误处理:GetErrorText,GetLastErrorCount,GetLastErrorNumber,GetLastErrorParm,GetLastErrorParmCount
4.创建对象:New,Open,OpenEx,OpenId
5.其它:GetClassName,GetId,,IsMultiByte,,ResultSet,SetCacheLog,SetLogMask,SetOutPut,Static
 楼主| 发表于 2003-4-9 21:58:14 | 显示全部楼层

用VB.net访问Cache数据库。

[这个贴子最后由sbf2000在 2003/04/09 10:15pm 第 1 次编辑]

了解了Factory,我们就可以这样创建和使用一个对象:
        Dim patient As Object
        patient = factory.[New]("Sample.Person")
        patient.name = "abc"
        patient.ssn = "111-22-3334"
        patient.sys_save()
        patient.sys_close()
        patient = Nothing
这里我们可以用对象的sys_save方法来存贮数据(这个功能最有用了),相当于在Cache中的调用%Save方法,但必须用sys_close结束,否则数据存贮为失败。
我们还可用于用下面的语句读取一个ID为1的对象:
        patient = factory.OpenId("Sample.Person", 1)
也可以这样调用对象的方法:
        patient.AgeGet()
如果调用的方法有返回值,可以先设置输出控件:
        factory.SetOutput(Text1)
可以这样获取错误:
        msg = factory.GetErrorText(err.description)
 楼主| 发表于 2003-4-9 22:13:32 | 显示全部楼层

用VB.net访问Cache数据库。

接下来我们看一下ResultSet类,它是用来执行查寻的。代码如下:
Dim rset As CacheObject.ResultSet
Dim columns As Integer
Dim counter As Integer
rset = factory.ResultSet("erson","ByName") //ByName是定义好的一个Query。
columns = rset.GetColumnCount()
rset.Execute("A") //"A"是ByName查寻需要的参数。
While rset.Next()
For counter = 1 To columns
Print rset.GetData(counter)
Next counter
Wend
rset.Close()
ResultSet有很多方法:
1.GetColumnCount,GetColumnHeader,GetData,GetDataAsString,GetDataByName,IsDataNull
2.GetParamCount,GetParamName,SetParam
3.Close,ContainsID,Next,Prepare,,SetRunTimeMode
 楼主| 发表于 2003-4-9 22:59:33 | 显示全部楼层

用VB.net访问Cache数据库。

小结:
1.对VB.net访问Cache有了一些印象以后,对Cache是后关系数据库的概念有了更深的认识了。
2.在VB端,VB本身的功能是完成软件界面和业务流程模型。而Cache端是提供数据内容的管理。跟传统的C/S或B/S不同的是,客户端可以以对象的方式实现对数据访问,不用再在客户端去做一些底层的数据保存、检索等编程了。
3.在Cache端,我们可以用设计对象模型的方法来设计数据结构,(Cache自动完成关系数据表的创建)。而且,最关键的是传统的关系数据库加上了面象对象的功能后,实现了关系表的继承等非常有用的特性。
4.在一般的关系数据库,如果我们要存贮患者和医生的个人信息的话,我们会设计一个patient表和一个doctor表,分别对患者和医生进行处理。而在Cache中,我们可以先设计一个Person对象,再从中派生出patient和doctor。这样,当我们用patient对象去访问时,只能访问到是患者的人,而用doctor去访问的是医生的人,面用person去访问时能访问到所有包括医生和患者的人。这与我们现实中的理解是相当符合的,也非常便于编程时一些控制,并可简化内容模型,增加代码的可重用性。
5.象VB.net这样的高级编程语言本身提供了很多功能强大的操作关系数据的能力,但用了Cache数据库以后,很多这些功能都用不到了或用得少了。
6.虽然我们可以在VB.net中使用Cache中定义的对象,但并不能象使用VB自身的类那样有丰富的功能,比如它不能在编写代码时自动获得对象的定义,因为实际上每个Cache对象,都只是一个CacheObject中提供的ObjInstance类的实例。
7.虽然现在流行的多层结构的软件开发也是可以达到这样的效果的,但使用Cache数据库对于小型规模的软件开发和减少复杂内容模型的数据管理难度是很有用的。也可能大大降低大型软件开发公司的开发成本。
8.我这里写的只是一点个人的肤浅认识,希望大家多多赐教!
发表于 2003-4-10 11:28:20 | 显示全部楼层

用VB.net访问Cache数据库。

非常好,继续努力!
发表于 2003-4-11 02:08:41 | 显示全部楼层

用VB.net访问Cache数据库。

建议改进一下,刚才敲的大段的没了,就因为多按了一下ESC!!!
发表于 2003-4-11 02:17:48 | 显示全部楼层

用VB.net访问Cache数据库。

哈哈!sbf2000很勤奋啊。
访问Caché数据库有多种方法,sbf谈的是一种,叫ActiveX binding,也可以和C++,JAVA binding,这样Layer 2融合在一起。
另外,用ODBC访问Caché数据库,这样为关系型DB写的Layer 还可用,据说仅仅这样就比用像MS SQL, Oracle, Sybase 快不少。
还有,可在Caché中把功能做成Web Services(相当简单),这边用WDSL得到,就只用写UI Layer了。
先写这些吧。
发表于 2003-4-11 02:22:37 | 显示全部楼层

用VB.net访问Cache数据库。

在.net里使用activeX或COM+,需要注意效率问题。
每调一次com,com interop service要执行20-30个cpu指令。
如果要采用cache和.net,最好通过.net的assembly。希望InterSystems以后能提供。
发表于 2003-4-14 23:00:12 | 显示全部楼层

用VB.net访问Cache数据库。

***** 版主模式 *****
该贴子是管理员从<a href=forums.cgi?forum=4>HL7研究</a>转移过来的!
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表