ASP网页设计数据会见
由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况;会见|数据服务器组件一样平常用于完成三层使用程序的营业划定规矩,因而必要与数据库交互。C++会见数占有两种体例:ADO和OLEDB消耗者模板。第12章我们已会商了通用数据会见(UDA)、ADO和OLEDB的感化。
从C++ADO与从ASP或VisualBasic会见ADO十分类似。利用完整一样的ADOCOM工具(如ADODB.Recordset),只是用分歧的言语创立和利用ADOCOM工具。但利用ADO时没有VisualC++导游,必需编写一切的完成代码。这不但须手工编写,并且还简单引进代码毛病,因而应仔细细心。可是可从C++中失掉完整可用的ADO工具模子。
OLEDB消耗者利用OLEDB供应者的服务会见数据。ADO是OLEDB消耗者的一个例子。利用C++可创立OLEDB消耗者,完整跳过ADO层。VisualC++导游可用于创立和利用OLEDB消耗者。可使用导游指向想要会见的数据库和表格,主动天生所需的代码。可是,由于消耗者代码间接指向指定的数据库,以是不如利用ADO天真。
18.3.1经由过程C++利用ADO
经由过程C++利用ADO必要两种妙技:了解ADO工具模子和在C++中利用COM工具。我们对ADO工具模子已十分熟习,但如今没有C++类库或模板库撑持ADO。由于ADO在COM上机关,利用ADO与利用其他COM工具不异。上面先容一下利用步骤。
1.设置利用ADO
C++中利用COM组件最复杂的办法是用#import关头字导进组件的范例库。#import指令环绕ADO范例库发生瘦C++类,能够用靠近于VBScript和VisualBasic的语句操纵ADO工具和接口。年夜部分ADO例子用VBScript编写,用#import指令能很简单地将它们转换为C++,比在没有包装类(wrapperclass)的情形下利用ADO简单。
利用#import时,可使用no_namespace属性,如许ADO范例库内容就没有局限限定。可是,这会引发称号与EOF的抵触,而rename属性可办理这个成绩。在TableStorage2.cpp增添以下内容可导进ADO范例库。
上述代码天生一个msADO15.tlh文件和一个msADO15.tli文件。msADO15.tlh文件包括前向援用、smart指针声明和typeinfo声明。msADO15.tli文件包括编译器发生的几个成员函数的完成。这两个文件用于察看和显现范例库中的可用内容。比方,上面是msADO15.tlh文件对ADO纪录集的smart指针的声明:
_COM_SMARTPTR_TYPEDEF(_Recordset,_uuideof(_Recordset));
前面的例子将申明怎样在代码中利用smart指针。在msADO15.tlh中另有一些列举量的声明,使得利用ADO更加便利。上面是光标地位的列举量声明:
如上所述,#import使得ADO的利用更加轻松,由于这个指令可主动创立包装类和来自范例库的范例信息。但对C++程序员来讲,将ADO前往的VARIANT数据范例变化为C/C++数据范例仍是对照贫苦。ADO2.0和VisualC++6.0用附加的ADOVC++扩大办理了这个成绩。这一章不会商ADOVC++扩大,有关内容可参考VisualC++文献。
还增添了一个宏,这个宏可以使程序简单了解,削减了嵌套代码的数目:
经由过程导进范例库,已可以使用一切ADO工具。上面先容怎样在C++中利用ADO举行读写。我们将以8-10所示的数据库为例。
假定对这个数据库已创建了一个称为MusicianDSN的ODBC毗连。
2.读数据库
起首在ITableStorage2中增添Read办法。这个办法从数据库读纪录,并将这些纪录拔出STL数据布局中,它的参数是DSN称号、用户名和口令。在对话框中,参数在Implementation文本框中呈现,如8-11所示。
上面看一下这个办法的完成:
起首声明办法中利用的变量,注重怎样利用ATLsmart指针的创立ADOConnection和Recordset工具。为在代码中跟踪毛病,我们接纳了非常处置,因而开启一个try块。任何ADO挪用都用后面声明的SAFE_CALL宏包装,假如任一办法挪用前往一个标明失利的值,就抛出一个非常:
起首翻开到数据库的毗连,这个毗连用于Recordset工具的Open办法。
假如乐成,可对数据库的纪录举行遍历。起首必需确保内存中以后有数据:
如今,将数据库中的数据拷贝到内存中的STL数据布局内,遍历纪录直到碰到文件停止标记EOF。只在字段真的有值时才拔出它,如许能够勤俭内存:
到今朝为止,一切统统都在try块中。假如有毛病呈现,程序流将进进catch块。_com_error变量包括了毛病动静的细节,我们增加了一个帮助函数将毛病的具体数据格局化为字符串。我们将这个毛病字符串传送到Error中,如许,在客户端能够经由过程Error工具的Description属性失掉它。
下面报告了怎样从数据库中读数据,上面会商怎样将数据写进数据库。
3.写数据库
在ITableStorage2中增加以下办法。它将STL数据布局中的信息写进数据库中。操纵界面如8-12所示。
别的一个差别是C++不克不及很好地撑持Variant范例。下面的例子的代码看上往不错,但它仅由字符型数据构成。假如数据范例混用的话,代码将变得凌乱。上面先容的OLEDB者消耗模板将使代码变得简便。
18.3.2OLEDB消耗者模板
OLEDB消耗者模板是一个绝对新的办法,其目标是改良在C++中举行数据存取的功能。它在VisualC++6.0中作为ATL3.0的一部分引进利用库扩大了C++功效,OLEDB消耗者模板库是为了经由过程OLEDB举行数据存取而计划的。这个库可以供应:
?会见OLEDB特性。
?集成ATL和MFC。
?数据库参数和列的绑定模子。
?利用原本的C/C++数据范例举行OLEDB编程。
别的,VisualC++的AppWizard可天生基础的OLEDB消耗者代码。
1.创立OLEDB消耗者
在创立OLEDB消耗者前必需创建数据源,我们接纳与ADO例子中所用的数据库类似的Access数据库。用在ATLObjectWizard增加一个新的ATL工具,选择DataAccess种别并选择Consumer,如8-13所示。
点击Next,选择所需的OLEDB供应者,由于我们选用了ODBC驱动程序,以是选择MicrosoftOLEDBProviderforODBCDrivers。如8-14所示。
选择所用的数据源称号为MusicianDSN。用户名和口令没有输出,假如数据库必要用户名和口令,可在此对话框中输出,如8-15所示。
点击OK按纽,然后选择所需的数据库表,如8-16所示。
再点击OK,导游将主动拔取一些称号,依据本人的必要可举行修正。假如将要增加纪录,可在Support部分选择insert框,如8-17所示。
点击OK后,导游发生两个类:CMusiciansAccessor和CMusicians,可完成数据范例转换等事情。我们将只间接利用CMusicians类,下一节再做申明。
2.读数据库
上面在ITableStorage2中增加利用新的OLEDB消耗者类读数据库的办法,由ATLObjectWizard天生的Read2不带任何参数,由于ATLObjectWizard已将数据源称号、用户名和口令(假如你供应了)硬编码进CMusicians类,如8-18所示。
OLEDB消耗者模板版本的Read2办法的代码比ADO版本的代码更加复杂:
假如上述代码没有编写的话,应在TableStorage2.cpp文件的顶部包括Musicians.h文件。
年夜部合作作已由theMusicians工具完成。当挪用Open后,就创立了与数据库的毗连,并且翻开了Musicians表。上面的代码创建数据布局,列称号映照由手工创立:
上面遍历数据库纪录。在利用OLEDB消耗者模板时,要判断纪录的停止,应反省MoveNext的前往值而不是反省EOF属性。当挪用MoveNext时,theMusicians工具的成员变量主动添补,在读下一个纪录前,必需先挪用ClearRecord,不然当该纪录的字段为NULL时,前一纪录的数据仍将占有成员变量。
上述代码比ADO例子中的响应代码简便很多。上面先容写纪录。
3.写数据库
在ITableStorage2中再增添一个称为Write2的新办法,数据库设置信息已在CMusicians类中硬编码,因而不用向Write2传送任何参数,如8-19所示。
代码的入手下手与Read2类似,年夜部合作作由theMusicians工具完成。起首挪用Open以毗连数据库和表。为了在数据库中增加一个纪录,先添补成员变量,然后挪用Insert。对一个新纪录来讲,应起首挪用ClearRecord,确保没有前一纪录的数据遗留上去。
下面利用了称为CopyValue的帮助办法。查找纪录中的字段的值是反复性的事情,可用此办法削减代码的数目:
18.3.3利用ADO,仍是利用OLEDB消耗者模板
举行数据存取时,可选用ADO或OLEDB消耗者模板。选用ADO可从头使用你对ADO工具模子的常识,代码修正也较简单,天真性好。但ADO不克不及很好地撑持绑定到C++的数据范例,而且VisualC++中没有响应的库和AppWizard撑持。
选用OLEDB消耗者模板可从VisualC++失掉库和AppWizard撑持。这意味着,VisualC++供应项目标基础布局,代码编写的速率较快,呈现的毛病也较少,但必需进修新的用于会见数据的API。假如你要编写很多必要会见数据的组件,那末这是值得的。
本章创立了一个复杂的C++服务器组件并加强其功效。我们先容了怎样会见ASP内置工具,怎样会见各类COM+接口。形貌了数据存取的两种办法。C++中可以使用ADO工具模子,但必要举行大批的数据范例转换。ATLObjectWizard可创立OLEDB消耗者,天生的代码比ADO简便,但天真性较差。
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。 完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
页:
[1]