透明 发表于 2015-1-16 22:36:08

MSSQL教程之MS SQL Server MFC DAO 类和 MFC ODBC ...

InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。odbc|server
MSSQLServerMFCDAO类和MFCODBC类:我利用哪一个类集?
microsoft 比以往更天真MFC数据库战略一系列选项MFC的ODBC数据库类数据会见工具DAOSDK类对照MFC数据库类优化您的MFC数据库使用程序结论

JocelynGarner
比以往更天真
自MFC数据会见工具(DAO)数据库类在1995年10月公布以来,MFC数据库开辟职员就已入手下手思索该利用哪一个类集。本白皮书其实不力争用惯例术语回覆此成绩。相反,这里要夸大的是对各类选择举行反省,以便您(即开辟职员)能够断定每种情形最合适利用哪一个MFC数据库类集。
年夜多半MFC开辟职员都熟习开放式数据库毗连(ODBC)数据库类-它们早在三年半之前就呈现了。在MFC4.2中,对这些类有一些主要的改善。
身为C++开辟职员,您大概不熟习DAO,由于到今朝为止它还只可用于MicrosoftAccess和VisualBasic®程序计划体系。假如您熟习DAO,就必需懂得:DAO在MFC中的完成很有分歧,但包含普遍。
懂得MFCODBC类的开辟职员必需晓得:固然MFCDAO类比ODBC类功效性更强,但DAO类不克不及取代它们。
MFC数据库战略
关于那些不怎样熟习MFC的人,我想提示一句:MFC有一个合用于各类数据库类的计划准绳。
MFC像一张薄薄的包装纸那样,封装Windows®操纵体系API,供应您想要的C++功能,同时供应您必要的笼统观点。当基本API具有实践意义时,向其增加值。但是多半时分MFC力争坚持不为人触及。
就如MFC封装更庞大的API一样,数据库类也封装更庞大的手艺。由于MFC能够在Intel、Unix和Alpha之间举行移值,以是数据库使用程序办理计划也是可移值的。
我们与MicrosoftAccess、VisualBasic利用不异的纪录集模子,因而,已利用那些产物的开辟职员不用进修新的典范。别的,两个类集的系统布局基础不异,利用个中一个类集的开辟职员能够轻松地切换到另外一个类集并利用它。
MFC数据库类
自从1.5版以后,MFC中就已包括ODBC数据库类。VisualC++2.0版供应了含有不异类的32位版本。这些类基于一个产业承认尺度,并已失掉普遍使用,且因其ODBC具有可移植性而遭到别的数据库开辟选择计划的喜爱。这类可移植性是指可以将很多ODBC数据源与用这些类创立的使用程序一同利用。最近的功能改善使得ODBC数据库类成为一个吸惹人的选择计划。
在多半情形下,MFC4.0中的DAO数据库类同意您间接会见桌面数据源而不必利用ODBC。DAO数据库类所具有的同时翻开多个数据库范例的才能、利用多半据源的才能和数据界说言语才能,使其成为主要的开辟选择计划。
如今,您已筹办好提出这个成绩,本人应利用哪一个数据库类汇合。假如您所供应的有关本人项目标信息未几,就很难断定这个成绩的谜底。可是,第一件要思索的事变是您利用甚么数据源。假如您一般利用桌面数据,我们勉励您思索MFCDAO数据库类,由于您将会发明它们极其无效且功效壮大。假如您次要利用ODBC(基于服务器)的数据,则利用基于ODBC的类会使您项目标停顿更富效果。
别的思索事项包含收集品种、可伸缩性请求,和速率是不是是最主要的要素。最好是用您以为事情得最好的数据库类集让使用程序坚持原型。能够举行一些基准测试,以断定您的最好功能选择。
真实的决意权在您。
一系列选项
您可用来创立数据库使用程序的选项汇合很年夜。它实践是完全的一系列选项,一端是桌面数据库使用程序,另外一端是严厉的客户/服务器数据库使用程序。唯一的两种看似分明的选择多是:在MicrosoftAccess97MDB数据中利用MFCDAO数据库类,而在MicrosoftSQLServer™6.5中利用MFCODBC数据库类。这两种组合次要是相互共同利用的,均十分无效。但您大概已对这些选择有所懂得,别的情形又该怎样呢?
扼要地说,以下是您赖以决议的历程:
断定数据源需求
您必要的数据库有多年夜?一次会有多人必要会见数据吗?偶然,其他的年夜多半步骤均取决于您选择的数据源。
断定接口需求
假如您必要的接口有大批的用户输出(如用户能够计划本人的查询),那末在调剂和分发数据库(一个或多个)时就必需要稳重。比方,假如必要用变更不年夜的数据添补列表框,而且已选择基于服务器的数据源,则将一般稳定化的数据存储在当地而非服务器上,是一种成心义的做法。
断定毗连性需求
今朝利用的收集协定有良多种,每种协定都对经由过程收集传送的数据各有分歧影响。关于收集的会商不是本白皮书分内之事,但您必要懂得怎样优化本人的数据库使用程序,以免碰到收集的数据圈套。
选择得当的工具(一个或多个)
Microsoft为数据库开辟职员供应了多种可选择的工具(MicrosoftAccess、VisualBasic、VisualBasicEnterprise、VisualC++/MFC和SQLServer),在某些情形下它们的功效略有堆叠。本白皮书旨在会商VisualC++/MFC选项。但假如您还未思索别的选项,应当也对它们略加懂得。
在实行前坚持原型
在本白皮书中您将数次看到此报告,由于它很主要。您大概已做了很好的选择,但除非您的办理计划真的起了感化,不然事情就不算完成!
别的,关于本白皮书,我们假定您想懂得的是MFC的数据库类。我们无妨尽量多地反省一些选择计划,以便您承认您想为本人的第一个原型接纳的引导。
MFCODBC数据库类利用MicrosoftAccess和VisualBasic中的纪录集模子。您能够用内置于类中的成员函数对纪录举行选择、分类、转动和别的处置。基本ODBC驱动程序会影响特别使用程序的功效。因而,若要使可移植性更强,您的使用程序就必需更具有通用性,大概必需依附于更初级其余ODBC功效。若有需要,能够间接挪用ODBC,以完成特别义务。如今,让我们反省该汇合中的单个类。
MFC的ODBC数据库类
就象利用MFC那样,需要时能够挪用基本API(在此情形下为ODBC)。
一个CDatabase工具代表一个到数据源的毗连,经由过程此毗连您能够在数据源长进行操纵。数据源是指以某些数据库办理体系(DBMS)作为宿主的指定命据实例。详细示例包含MicrosoftSQLServer、MicrosoftAccess、BorlanddBASE和xBASE。您能够在本人的使用程序中同时让一个或多个CDatabase工具处于举动形态,而且能够坚持到一个数据库工具的多个毗连。
一个CRecordset工具代表从数据源当选择的一个纪录汇合。称为“纪录集”的CRecordset工具有三种可用的情势:静态集、快照、静态纪录集。静态集是与其他用户的更新坚持同步的纪录集。快照是静态纪录集,它反应的是抓拍快照时数据库的形态。静态纪录集相似于静态集,但一般只用于MicrosoftSQLServer。每种情势都代表在翻开纪录集时断定的纪录汇合,但当您在静态集内或静态纪录集内转动到一笔记录时,它反应厥后由其他用户或您使用程序中的别的纪录集对纪录所做的变动。
MFC4.2以书签的情势向CRecordset类中增加新的导航功效,并增加标识及导航到纪录的AbsolutePosition的才能。书签是独一的标识符,经由过程挪用该标识符可前往指定的纪录。
类CRecordView是一种MFC机关-一种显现数据的情势。由于CRecordView是基于CFormView的,以是它具有该基本类的一切遗传功效。从实质上说,窗体视图在窗口的客户端地区舒展对话框模板。这使得增加控件与显现字段数据极其简单。
当利用AppWizard和ClassWizard创立基于ODBC的数据库使用程序时,纪录集的列会主动绑定到(静态地)成员变量,这些变量能够随后增加到对话框模板中。
一个CDBException工具代表一种由数据库类引发的非常毛病前提。该类中含有两个大众数据成员,可以使用这两个成员断定招致非常毛病的缘故原由,或显现对非常毛病举行申明的文本动静。CDBException工具由数据库类的成员函数机关与抛出。
CFieldExchange类撑持由数据库类利用的纪录字段互换(RFX)例程。假如您正在编写自界说数据范例的数据互换例程,则利用该类;不然,您不会间接利用该类。RFX在您纪录集工具的字段数据成员和数据源受骗前纪录的响应字段之间互换数据。RFX办理两个偏向中的互换,即来自数据源的互换与到数据源的互换。
数据会见工具
在DAO的本机格局中,包括21个工具和20个汇合。并且,DAO不但供应单个的工具,如表和字段,还供应工具所属的汇合。工具的这类明晰的条理布局使得可以轻松地将面向工具的道理使用于数据库开辟。
DAO的存在已有一段工夫。DAO1.0版呈现在MicrosoftAccess1.0版中,它仅供应到表与查询布局的接口,和代表具无数量无限的属性的表、静态集、快照的工具。VisualBasic3.0版中的DataAccessObjects1.0增加了TableDef、QueryDef和Field工具,以供应可编程的布局。
MicrosoftAccess2.0版中的DAO2.0版有OLE主动化的雏形,和对几近一切MicrosoftJet功效的全体编程会见权限。它具有具有牢靠的工具与属性汇合的全体工具模子。
DAO2.5版中含有ODBC桌面数据库驱动程序(ODBCDesktopDatabaseDriver),这些驱动程序是为16位平台能与ODBCDesktopDatabaseDrivers2.0版一同利用而创立的。该16位版本是为用于VisualBasic4.0版的16位版本而安装的。
DAO3.0版随带在MicrosoftAccessforWindows95、VisualBasic4.0版(32位)、MicrosoftExcel7.0版和VisualC++4.0版中。DAO失掉了加强,以撑持任何兼容主机的单机接口。
DAO3.5版随带在MicrosoftAccessforWindows97中,而且含有新的ODBCDirectCOM工具。MFCDAO数据库类不包含这些工具的类。
最为主要的是,DAO接口是基于OLECOM的,它很好地安装DAO以顺应不休开展的手艺和操纵体系。

此处是DAO条理布局图表。在顶端,将看到DBEngine工具,该工具中含有一切别的工具。这是独一没有汇合的工具,由于您只能有一个引擎。但能够有多个事情区(Workspace)、数据库(Database)等等,这恰是余下的工具都有本人所属汇合的缘故原由。
在事情区中,能够有多个数据库,一个基础表(.MDB)或一个附加/链接的表。在每一个数据库中将有一个或多个表、查询、纪录集,而个中的每一个表、查询、纪录集不但包括字段和(或)索引,另有别的范例的工具。
别的,与事情区毗连的是用户工具和组工具,它们构成了DAO的平安模子。
自力但与引擎工具毗连的是Errors工具。
Errors汇合中工具的附加体例分歧于别的DAO汇合。最具体的毛病放在汇合的开端,最惯例的毛病放在开首。
MFC和DAO
如今要谈的是MFC怎样完成DAO。由于我们不是分离包装每一个DAO工具,以是实践上MFC会平坦DAO的条理布局。我们为您供应8个工具而不是21个工具。
我们封装一切的DAO功效,除Security工具外-Users工具、Groups工具和新的ODBCDirect工具。这是我们成心而为。比方,我们以为在检察平安性工具时,环绕它们创立类将不会给DAO的利用增加任何值,因而仍是让您间接挪用DAO,来处置那些工具。这也是与MFC准绳分歧的:应当在对增加值的态度而言成心义的中央创立类。但我们仍会在MFCTechnicalNote54中供应关于怎样完成平安性模子的引导。
别的,我们还办理DAO要将工具追加到汇合的请求。在DAO中,您创立工具,然后将它追加到汇合中。除一种破例情形外,这类增加是主动完成的。关于这类破例情形,可作为一个独自的步骤来设置开辟职员可否追加工具,这是很用的。
固然大概用ODBC数据库类举行静态绑定,但完成这一目标的功效并不是MFC类的内置功效。它被置进DAO数据库类,您能够相称轻松地举行静态绑定。如今我们的第二个演示将更多地谈及这一点。
DAO供应来自SQL的数据界说言语(DDL),以便您创立数据库、表、纪录集等。在ODBC中没有DDL。
最初,当您必要时,老是能够对基本DAOOLE工具举行间接挪用。
MFCDAO数据库类的条理布局


五个由CObject派生的MFCDAO类(CDaoWorkspace、CDaoDatabase、CDaoTableDef、CDaoQueryDef和CDaoRecordset)具有该基本类的一切功效。
CDaoException由CException派生失掉,具有该类的长处,包含显现来自基本DAOErrors工具的毛病动静的才能。
如后面提到的那样,CDaoRecordView由CFormView派生失掉,而CFormView又由CScrollView派生失掉,顺次类推。能够看到CDaoRecordView类在疾速而轻松地完成基于窗体的数据显现方面所具有的全体长处。别的,另有关于CDaoRecordView的导游撑持。该类中的功效本色上是与CRecordView类一样的。
CDaoFieldExchange类撑持由DAO数据库类利用的DAO纪录字段互换(DFX)例程。假如要创立自界说的DFX例程,只需间接挪用该工具便可。
MFCDAO数据库类
CDaoWorkspace封装DBEngine工具和Workspace工具。MFCDAO类供应事情区的现实十分主要。ODBC数据库类分歧时撑持多个数据库毗连。
事件处置是在DAO数据库类中的Workspace(事情区)级别完成的,而不是在ODBC类中的Recordse(纪录集)级别完成的。一个事件大概会影响一切翻开的数据库和纪录集,大概您能够断绝事件,使其只会影响指定的数据库,等等。
多半时分,您不用忧虑事情区工具的创立。假如您未创立,MFC就将为您翻开一个事情区工具。假如您必要的话,DAO数据库类可撑持多个事情区。
最初,您不用忧虑事情区工具超越局限或是在数据库会话完成前封闭。可使用事情区指针会见事情区汇合,会见数据库汇合,和会见数据库引擎的属性等。
CDaoDatabase
CDaoDatabase在系统布局上相似于基于ODBC的CDatabase类。CDaoDatabase也封装数据库毗连。由于您不用老是利用ODBC,以是关于年夜多半桌面数据源,数据源的地位就表达为路径。CDaoDatabase能够存储tabledef和querydef工具,为您的开辟供应了极小气便。CDaoDatabase可以使用当地及远程数据源。在本白皮书的稍后部分,有一个可供您利用的数据源的列表。
该数据库工具在会话时代也一向持续存在。需要时能够明白地封闭数据库毗连。仅就对照而言,CDatabase类有21个成员函数,而CDaoDatabase有26个成员函数。这些成员函数中相互响应的都十分类似,在CDaoDatabase中另有几个没有对应成员函数。
在ODBC数据库类中没有与CDaoTableDef响应的类。TableDef工具让您反省数据库的架构(布局),不管表是本机MicrosoftAccess表(基础表)仍是链接的表。假如用DAO间接翻开内部数据源,便可向个中增加字段和索引。假如您链接了表,就能够反省布局,但不克不及变动它。能够将表作为纪录集的基本。如许做会使您取得几个优点,包含利用名为Seek的疾速搜刮成员函数。
利用CDaoTableDef能够断定是不是可经由过程挪用CDaoTableDef::CanUpdate编纂表中的数据。MFC卖力为您办理DAOField和Index汇合。利用CDaoTableDef时,您能够选择是不是向TableDefs汇合中追加表;而利用一切别的工具时,会主动举行追加。
您用来检索纪录的SQL存储在CDaoQueryDef工具中。您可用该工具存储您提出的有关数据的“成绩”,如“HowmanycustomersdidXdollarsofbusinesslastmonth?”。能够检索或从头利用存储的查询,可按以下三种办法之一利用它们:经由过程将指针传送到CDaoQueryDef工具而创立纪录集。间接实行操纵查询,即挪动或变动数据的查询。操纵查询包含追加、删除、天生表和更新查询。删除查询和更新查询会变动现无数据;附加查询和天生表查询会挪动现无数据。实行SQLPASSTHROUGH查询:SQL间接传送查询是间接发送到数据库服务器而不会被MicrosoftJet数据库引擎中止的SQL语句。SQL间接传送查询为您的使用程序供应间接利用数据库服务器的功效的才能。
别的,CDaoRecordset还很相似于基于ODBC的CRecordset类。纪录集不但能够基于表,也能够基于静态集和快照。请记着,纪录集代表您已检索到的纪录和穿过数据的办法。挪动并转动数据的办法包含Seek(只用于表范例的纪录集)、Find和Move操纵,和AbsolutePosition和(假如您的数据源撑持的话)书签。书签是独一的标识符,可经由过程挪用该标识符来前往指定的纪录。
MFCDAO数据库类中的年夜部分功效是存在于CDaoRecordset中的。CRecordset只要44个成员函数,与之比拟CDaoRecordset有91个成员函数。这类分外的功效体现为字段值的导航、高速缓存、设置和检索中,和纪录集属性的设置和检索。
CDaoRecordView和CRecordView类有几近不异的功效。别的,它们都还具有因基于CFormView而取得的长处。请记着,窗体视图就好象在窗口的客户端地区舒展的对话框模板一样,有了它,增加控件与显现字段数据就很简单。AppWizard和ClassWizard撑持基于窗体的数据显现。假如利用AppWizard创立初始使用程序,您数据库中的列就会主动绑定到成员变量。
关于DAO数据库类,非常毛病处置略有分歧。类CDaoException将前往基本DAOOLE工具的毛病动静。多半时分,您能够检索的毛病信息要比一般接纳基于ODBC的类所取得的毛病信息多。在MFC中,一切DAO毛病都表达为CDaoException范例的非常毛病。
当捕捉到这类范例的非常毛病时,可使用CDaoException成员函数从任何存储在数据库引擎Errors汇合中的DAO毛病工具中检索信息。每一个毛病产生时,城市有一个或多个毛病工具放进Errors汇合中。当另外一个DAO操纵天生毛病时,Errors汇合被扫除,新的毛病工具被放进Errors汇合。
CDaoFieldExchange类撑持由DAO数据库类利用的DAO纪录字段互换(DFX)例程。假如您正在编写自界说数据范例的数据互换例程,则利用该类;不然,您不会间接利用该类。DFX在您CDaoRecordset工具的字段数据成员和数据源受骗前纪录的响应字段之间互换数据。DFX办理两个偏向中的互换,即来自数据源的互换与到数据源的互换。若需关于编写自界说DFX例程的信息,请拜见TechnicalNote53(可在BooksOnline中的MFC下找到)。
CDaoFieldExchange工具供应产生DAO纪录字段互换所必要的高低文信息。CDaoFieldExchange工具撑持很多操纵,包含绑定参数和字段数据成员,和在以后纪录的字段上设置各类标记。DFX操纵是在范例的纪录集类数据成员上实行的,这些范例由CDaoFieldExchange中的enumFieldType界说。大概的FieldType值有:用于字段数据成员的CDaoFieldExchange::outputColumn。用于参数数据成员的CDaoFieldExchange::param。

MFC的ODBC数据库类
这里是基于ODBC的数据库类的图片,与您所懂得的不异。顶真个栏代表基于ODBC、与ODBC扳谈的MFC类。每一个数据库的ODBC驱动程序都注释SQL挪用,并针对每一个数据源对其举行转换。很多数据源都与响应的驱动程序一同显现在干系图的底部,以提示您ODBC的天真性。
是DAO数据库类的图片。它们经由过程含有DAO的OLE举行通讯,DAO与Jet数据库引擎扳谈。Jet数据库引擎有一些自力的DLL,用于与各类桌面数据源举行通讯。

MFCDAO数据库类-桌面数据源
MicrosoftJet数据库引擎能够间接翻开诸如FoxPro®数据库和Paradox等的数据源。但只需您不必要变动这些数据源的架构,就能够将这些表链接到MicrosoftAccess数据库中,实践上这会更无效。这就是FoxPro和Paradox表(它们仅是示例)显现在两个地位的缘故原由。虚线用以表示当大概间接翻开数据源时,它的效力会更低。
被链接表的表面及事情体例与MicrosoftJet数据库中的任何别的表一样(固然在毗连到远程数据和检索远程数据方面稍微有些功能差别)。创建和保护与远程数据源毗连所必要的信息存储在表界说中。
相反,当您间接翻开表时,必需在每一个会话入手下手时供应毗连信息,以便创建与数据源的毗连。创建与远程数据源的毗连所必要的信息都不存储在MicrosoftJet数据库中。若要间接翻开表,就必需利用CDaoTableDef::Create,而且必需供应毗连信息(如数据源、用户名、暗码和数据库称号)。

MFCDAO数据库类,包含SQL数据库
假如利用DAO数据库类,就能够经过ODBC会见服务器范例的数据库(如MicrosoftSQLServer和ORACLE)。不是完全的图片,由于它并没有包含对一切范例数据源的会见。
最初,是关于MFC数据库类的完全图片。请注重,MFC栏和ODBC栏上的垂直线暗示指派两个数据库类集用作“非此即彼”决议。您能够选择会见一切范例的数据源,但不克不及夹杂两个汇合中的MFC数据库类。

MFC数据库类
ODBC数据库类的数据源选择
当您用MFCODBC类编写使用程序时,能够毗连就任何数据源(只需您有它的ODBC驱动程序)。ODBC驱动程序办理器和ODBC驱动程序的操纵在您用这些类编写的使用程序中是通明的,但一般驱动程序功能会影呼应用程序的功效。
一般,MFC静态集(但并不是只向前转动的纪录集)请求ODBC驱动程序具有2级API分歧性。假如数据源的驱动程序切合1级API设置,您就仍可使用可更新且只读的快照与只向前转动的纪录集,但不克不及利用静态集。但是,假如1级驱动程序撑持扩大的提取和键集驱动游标,它就能够撑持静态集。
ODBCDesktopDriverPack3.0版撑持2级ODBCAPI挪用SQLExtendedFetch。
AppWizard和ClassWizard会主动将数据源的列静态地绑定到您使用程序的成员变量中。这是在您使用程序与数据源之间创建毗连的最复杂的办法,但不是最天真的办法。能够用类CFieldExchange将自界说的纪录字段互换(RFX)挪用增加到您的使用程序中。请拜见“TechnicalNote43:RFXRoutines”,以猎取更多信息。
别的,还能够思索静态地绑定命据库的列。在最一般的级别中可实行以下步骤:机关您的次要纪录集工具。然后,能够将指针传送给一个翻开的CDatabase工具,大概也能够用别的办法向列纪录集供应毗连信息。实行一些步骤,静态地增加列。翻开您的次要纪录集。
纪录会议选择纪录,并利用纪录字段互换(RFX)绑定“静态”列(映照到纪录集字段数据成员的列)和静态列(映照到您分派的分外存储的列)。
DAO数据库类的数据源选项
如今我们要谈的是您能够用DAO数据库类毗连的数据源、列的静态绑定、列的静态绑定,和纪录的双缓冲。
既然MicrosoftAccess数据库是Jet的本机数据库,您天然就能够以最疾速度会见它们。MicrosoftAccess97具有的数据库格局是DAO3.5版的本机数据库格局。假如利用MicrosoftAccess97数据库,将取得最为疾速的功能。
Jet利用独自的DLL供应对MicrosoftJet1.x和2.0版数据库的会见权限。存储引擎和格局完整是用MicrosoftJet3.0版订正的。假设变动的地方良多,MicrosoftJet3.0版就会将2.0版数据库视为内部ISAM,这会影响功能。因而,这也是促使您应当思索将MicrosoftAccess数据库晋级的公道缘故原由。
别的,您还能够会见可安装的ISAM数据库和ODBC数据源。ISAM(基于索引的一连会见办法)数据库,如FoxPro和dBASE,能够间接翻开,也能够链接到Access数据库以完成最好功能。上面是DAO能够会见的数据源的列表:MicrosoftFoxPro的2.0、2.5和2.6版。在3.0版中能够导进与导出数据,但不克不及创立工具。dBASEIII、dBASEIV和dBASE5.0Paradox的3.x、4.x和5.x版Btrieve的5.1x和6.0版MicrosoftExcel的3.0、4.0、5.0、7.0和8.0版事情表LotusWKS、WK1、WK3、WK4电子表格文本文件
请记着,MicrosoftAccess的1.x、2.0和7.0版数据库都属于此种别。
能够经由过程ODBC会见ODBC数据源,如SQLServer和Oracle,因而您能够选择针对这些数据源利用DAO。一个ODBC数据源能够来自任何DBMS,只需您具有该DBMS的得当的ODBC驱动程序。关于VisualC++2.0版或更高版本,您必要32位的ODBC驱动程序(但Win32除外,在Win32中必要16位的ODBC驱动程序)。上面是此版本VisualC++所包括的ODBC驱动程序列表。SQLServerMicrosoftAccessMicrosoftFoxProMicrosoftExceldBASEParadox文本文件
MicrosoftDesktopDatabaseDrivers3.0版(它包括列表中的最初六项)为这些数据源供应最好功能。这些只限32位驱动程序。
将内部数据源(如SQLServer)链接到MicrosoftAccess表是最无效的处置数据会见的办法。在将使用程序毗连到远程数据源之前,必需先确保使用程序的用户能够会见远程数据,而且确保准确地计划您的使用程序,以办理远程数据源平安性困难。别的,您还必需确保使用程序可以准确地与辨别巨细写的数据源举行交换,而且确保准确地初始化可安装的ISAM,以用于您想会见的数据源。最初,您必需反省您的代码,以确保在会见非Jet数据源时,代码没有利用MicrosoftJet数据源公用的工具或挪用。
设置链接最简便的办法是:进进MicrosoftAccess。假如用的是MicrosoftAccess2.0版,则利用“文件”/“附加表”命令;假如用的是MicrosoftAccess95和MicrosoftAccess97,则利用“文件”/“猎取内部数据”/“链接表”命令。
毗连信息存储在您所利用的基础表(.MDB)中。假如挪动了内部数据的地位,就必需在MicrosoftAccess中或从代码中挪用CDaoTableDef::RefreshLink,从头创建链接。
DAO纪录字段互换机制与在基于ODBC的数据库类中的RFX有着不异的事情体例。纪录集工具的字段数据成员假如接洽在一同,就构成一个“编纂缓冲区”,以保留一个纪录的选定列。当纪录集第一次翻开并要读取第一笔记录时,DFX就会将每一个选定列与得当字段数据成员的地点绑定(联系关系)在一同。当纪录集更新一笔记录时,DFX挪用DAO以向数据库引擎发送得当的命令。DFX使用它对字段数据成员所懂得的内容,指定要写进的数据源中的列(字段)。
导游撑持列的静态绑定。您能够增加本人的DFX挪用,就象利用基于ODBC的类时那样。起首,关于每一个绑定字段和参数,都必需将成员增加到CDaoRecordset派生的类中。接上去,CDaoRecordset::DoFieldExchange应被替换。请注重,成员的数据范例很主要。它应与来自数据库字段中的数据婚配,大概最少可转换成那品种型。MFCTechnical#53更具体地报告了此历程。
CDaoFieldExchange类撑持由DAO数据库类利用的DAO纪录字段互换(DFX)例程。假如您正在编写自界说数据范例的数据互换例程,则利用该类。CDaoFieldExchange工具供应产生DAO纪录字段互换所必要的高低文信息。CDaoFieldExchange工具撑持很多操纵,包含绑定参数和字段数据成员,和在以后纪录的字段上设置各类标记。
DAO数据库类中的静态绑定
假如能够用基于ODBC的类静态绑定列,对这类举动的撑持就不会内置于MFC类中。静态绑定会内置在DAO数据库类中,并且实行起来相称简单。
还能够做一些别的的事变以优化功能,如检索纪录的一部分而不是全部纪录。在本报告的稍后部分中,我们将供应一些能够优化使用程序的办法。
DFX和静态绑定不是相互排挤的选择计划。经由过程DAO数据库类,能够将静态和静态绑定挪用夹杂,以完成最年夜效力。
DAO数据库类中的双缓冲
在MFC的CDaoRecordset类中,双缓冲是一种当纪录集内确当前纪录产生变动时简化检测的机制。当增加新纪录和编纂现有纪录时,对您的DAO纪录集利用双缓冲会削减必须的事情量。默许情形下,您的MFCDAO纪录集保存编纂缓冲区的第二份正本(纪录集类的字段数据成员,全部复制;DAO“匡助”中称响应的缓冲区为“复制缓冲区”)。当您对数据成员举行变动时,MFC会拿它们与正本(“双缓冲区”)举行对照以检测变动。
双缓冲的代用办法-不保存数据的正本-当编纂以后纪录的字段时,请求您举行别的函数挪用。
双缓冲一向是基于ODBC的数据库类的一部分。关于DAO数据库类,假如必要,您能够停用该机制以进步效力。
该机制的主开关名为m_bCheckCacheForDirtyFields,Dirty意义是“已变动”。假如将此开关置于ON(开),就能够对全体或部分字段启用双缓冲。假如该主开关是OFF(关),就会禁用全部双缓冲机制。
您最想封闭其双缓冲的字段包含备注字段、图片字段,和别的BLOB(年夜型二进制工具)。
DAOSDK类
DAOSDK中含有一些C++数据库类,这些类相互自力,并且分歧于MFCDAO数据库类。这些C++类将单个工具封装到DAO条理布局中。固然您能够将DAOSDKC++类与MFCDAO数据库类夹杂,但DAOSDKC++类不遵守操纵符超载的MFC原则,而且在夹杂利用这些类时您必需小心。有关的具体信息,请参阅MicrosoftSystemsJournal(1999年6月)中的文章“TheDAOofDatabases:UsingDataAccessObjectsandtheJetEngineinC++”。
下表对照了DAOSDK类的功效与MFCDAO数据库类的功效。DAOSDK数据库类
MFCDAO数据库类
从VisualBasic举行复杂的迁徙
从MFCODBC数据库类举行复杂的迁徙
间接映照到DAO的OLE主动化工具
切合MFC尺度两相布局
更多的Jet/DAO功效
撑持AppWizard和ClassWizard
不切合MFC尺度两相布局
埋没更坚苦的DAO功效

对那些用惯了VisualBasic的人而言,利用DAOSDK类是更简单完成的转换,但它不切合MFC。那些已利用MFCODBC数据库类的开辟职员则会发明,MFCDAO类的系统布局和用法对他们来讲很熟习。
对照MFC数据库类
我们无妨起首重点会商两个类集内配合的数据库功效。
两者都撑持对纪录集举行转动ODBC类依附于基本驱动程序。DAO类能更好地撑持MDB,对可安装的ISAM无益;而且对基于服务器的数据,DAO类与ODBC数据库类的撑持水平不异。
两者都撑持事件在Database(数据库)级其余ODBC类。在Workspace(事情区)级其余DAO类。纪录集更新功效几近不异。两者都撑持在更新时代锁定纪录。两个类集都撑持字段数据变动的检测。两者都有Move操纵。CDatabase和CDaoDatabase都可检测数据源是不是承受事件。自从MFC4.2入手下手,ODBC数据库类中的事件请求就相称宽松了。两种数据库工具都同意您设置预界说的查询超不时期。两者都能够实行间接的SQL语句。
ODBC数据库类的别的功效自从MFC4.2入手下手,ODBC数据库类就是多线程的。若要使用此功能,就必需利用多线程的ODBC驱动程序。DAO正开辟成单位线程,但还没有断定什么时候能投进利用。在MFC4.2中,大批行提取功效是新功效,别的还增加了特别的导航才能。
在针对很多成绩的解答中,我们已对把持台数据库使用程序赐与了更好的撑持。CDatabase::OpenEx中的新选项有:CDatabase::noOdbcDialog不管供应的毗连信息是不是充足,都不显现ODBC毗连对话框。CDatabase::forceOdbcDialog老是显现ODBC毗连对话框。
DAO数据库类的别的功效Workspace、TableDef和QueryDef工具均是DAO数据库类所独占的。在ODBC数据库类中没有这些工具的间接等价工具。CDaoTableDef和CDaoQueryDef功效一般能够经由过程间接的ODBC挪用而反复利用(如CATALOG2示例中所示的挪用)。CDaoDatabase撑持TableDef、QueryDef和Relation的创立。
CDaoRecordset具有更强的导航功效Find操纵百分比地位Seek大批纪录提取功效和相干的高速缓冲都是内置的在运转时用CDaoTableDef工具创立字段和索引的才能是极佳上风,这可用于对撑持它的数据源举行确认。CDaoQueryDefs能够经由过程利用字段和索引而创立,并可存储起来以备反复利用。CDaoQueryDefs还能够把持ODBC超时。
优化您的MFC数据库使用程序
有一些分明但常被疏忽的办法能够改善使用程序的功能。比方,查明您的收集如何才干加强或妨害数据检索(如异步查询)。
您所具有的ODBC驱动程序的范例大概也会影响收集的功能。单级驱动程序用于那些不基于SQL的数据库。其数据库文件间接由该驱动程序处置。该驱动程序处置SQL语句并从数据库中检索信息。SQL语句一经剖析与转换后,就作为基础文件操纵传给数据库。处置xBASE文件的驱动程序是实行单级驱动程序的一个示例。单级驱动程序大概会限定可提交的SQL语句汇合。单级驱动程序必需撑持的最小SQL语句汇合是在附录C“SQL语法”中的ODBCSDK《程序员指南》中界说的。单级驱动程序一般要比利用本机DBMS工具(如MicrosoftFoxPro)慢一些,由于它们要剖析SQL语句剖析并将其转换成基础文件操纵。它们慢到甚么水平取决于该历程的优化水平。两个分歧单级驱动程序之间的速率差别一般要回因于优化的办法。在多级设置中,驱动程序将哀求发送各处理这些哀求的服务器。哀求接纳的格局多是SQL或DBMS公用的格局。固然全部安装能够在一个体系上完成,但更罕见的则是散布到各个平台中。一般,使用程序、驱动程序和驱动程序办理器均驻留在一个体系上,称为客户端。而数据库和把持对数据库会见的软件则驻留在另外一个体系上,称为服务器。有两品种型的多级驱动程序:两级和三级(或网关)。有关的具体信息,请拜见ColleenLambert的文章“ODBC:Architecture,Performance,andTuning”(位于MicrosoftDeveloperNetwork光盘)。
优化ODBC数据库和纪录集工具
当您翻开CDatabase工具时,就能够供应数据源称号或NULL以向用户显现选择对话框。MFCODBC数据库类不撑持对数据库的排它性会见,因而毗连老是共享的。可是,您能够以只读体例翻开数据库。请记着,假如如许做,则一切从该CDatabase工具派生的纪录集将也是只读的。上面的选项可以使得把持台使用程序的编写更加简单。这些新选项是用户最常哀求的。CDatabase::noOdbcDialog不管供应的毗连信息是不是充足,都不显现ODBC毗连对话框。CDatabase::forceOdbcDialog老是显现ODBC毗连对话框。
您能够选择将ODBC游标库与您的使用程序装载到一同。依据基本驱动程序的功能,您也大概不必要它。游标库可遮蔽基本ODBC驱动程序的某些功效,从而无效地避免利用静态集(假如驱动程序撑持它们)。假如装载了游标库,将只撑持静态快照和“forwardOnly”游标。
所翻开的CRecordset工具的范例将对使用程序功能有很年夜影响。假如您想让静态纪录集完成双向转动,请选择CRecordset::dynaset范例。若想让静态纪录集完成双向转动,请选择CRecordset::snapshot范例。假如不必要对数据举行往返转动,请选择CRecordset::forwardOnly范例,如许会创立一个只能向前转动的只读纪录集。新的CRecordset::dynamic范例纪录集是一个可双向转动的纪录集。在举行提取操纵后,其他用户对成员身份、排序和数据值所做的变动都是可见的。可是请注重,很多ODBC驱动程序不撑持这类范例的纪录集。
CRecordset的别的选项有:CRecordset::none未设置任何选项。默许情形下,能够用Edit或Delete对纪录集举行更新,并且同意用AddNew追加新纪录。可更新性不但取决于数据源,也取决于您指定的选项。CRecordset::appendOnly不同意在纪录集长进行Edit或Delete操纵。只同意利用AddNew。CRecordset::readOnly以只读体例翻开纪录集。CRecordset::optimizeBulkAdd利用已筹办好的SQL语句,一次优化增加多个纪录的操纵。该选项与CRecordset::useMultiRowFetch是互斥的。CRecordset::useMultiRowFetch实行大批行提取,以同意在一个提取操纵中检索多行。该选项与CRecordset::optimizeBulkAdd是互斥的。请注重,假如指定CRecordset::useMultiRowFetch,则会主动开启选项CRecordset::noDirtyFieldCheck(双缓冲将不成用);在只向前转动纪录集上,将主动开启选项CRecordset::useExtendedFetch。CRecordset::skipDeletedRecords在纪录集内导航时跳过已删除的纪录。这会下降某些相干提取的功能。该选项在只向前转动纪录集上有效。请注重,CRecordset::skipDeletedRecords与“驱动程序包装”相似,这意味着删除过的行已从纪录集内删失落了。CRecordset::useBookmarks假如撑持的话,能够在纪录集上利用书签。书签会下降数据检索的速率,但会改善数据导航的功能。在只向前转动纪录集上书签有效。CRecordset::noDirtyFieldCheck封闭主动的Dirty字段反省(双缓冲)。这将改善功能;但您必需经由过程挪用SetFieldDirty和SetFieldNull成员函数,手工将字段标记为Dirty。CRecordset::executeDirect不利用已筹办好的SQL语句。在需改善功能时,假如不挪用Requery成员函数,就请指定该选项。CRecordset::useExtendedFetch实行SQLExtendedFetch而不是SQLFetch。这是用于在只向前转动纪录集上实行大批行提取而计划的。假如在只向前转动纪录集上指定选项CRecordset::useMultiRowFetch,则会主动开启CRecordset::useExtendedFetch。CRecordset::userAllocMultiRowBuffers用户将为数据分派存储缓冲区。假如想本人分派存储量,应将该选项与CRecordset::useMultiRowFetch一同利用;不然,框架将主动分派需要的存储量。
假如您乐意的话,可使用大批行提取改善功能。在翻开纪录集工具前,能够用SetRowsetSize成员函数界说行集的巨细。行集的巨细指定了一次提取应检索几笔记录。实行大批行提取时,默许行集巨细为25。请注重。假如不实行大批行提取,行集的巨细坚持流动值1。
在将行集巨细初始化后,应挪用Open成员函数。在此处您必需指定dwOptions参数的CRecordset::useMultiRowFetch选项,以实行大批行提取。别的,还能够设置CRecordset::userAllocMultiRowBuffers选项。年夜部分纪录字段互换机制在提取时代均用数组来存储检索到的多行数据。这些存储缓冲区可由框架主动分派,大概您也能够手工分派它们。指定CRecordset::userAllocMultiRowBuffers选项就意味着要由您举行分派。
优化DAO数据库和纪录集工具
假如利用CDaoDatabase工具,您应利用一个字符串表达式,该表达式是现有MicrosoftJet(.MDB)数据库文件的称号。假如文件名有扩大名,则请求带其扩大名。假如您的收集撑持一致定名商定(UNC),则还能够指定收集路径,如“\MYSERVERMYSHAREMYDIRMYDB.MDB”。(双反斜线是字符串笔墨中所请求的,由于“”是C++的本义符。)当以这类体例利用数据库时,有一些必要注重的事项。
假如某个数据库已由另外一个用户以独有会见情势翻开,MFC就会抛出一个非常毛病。利用该非常毛病可让您的用户晓得该数据库是不成会见的。
假如您用空字符串("")翻开数据库,并正在毗连到ODBC数据源,就会显现一个对话框,框中列出一切已注册的ODBC数据源称号,以便用户选择数据库。应制止与ODBC数据源间接毗连;而是利用链接的表。
CDaoDatabase工具能够以独有会见的体例翻开。默许情形下,它是以共享会见的体例翻开的。能够将它作为只读数据源翻开,也能够以读/写会见体例翻开。一切由CDaoDatabase工具派生的纪录集都承继该数据库工具的读取才能。
与CRecordset工具一样,CDaoRecordset有多品种型。假如选择dbOpenDynaset,您就失掉能够双向转动的静态集范例的纪录集。这是默许选项。假如选择dbOpenSnapshot,您失掉的就将是能够双向转动的快照范例的纪录集。最初,利用dbOpenTable能够翻开能双向转动的表范例的纪录集。没法用MFCODBC数据库类翻开基于表的纪录集。
CDaoRecordset工具所具有的选项与CRecordset工具的选项相似。dbAppendOnly您只可追加新纪录(只限静态集范例的纪录集)。该选项的字面意义是纪录只能够被追加。MFCODBC数据库类有只追加选项,该选项同意对纪录举行检索和追加。dbForwardOnly纪录集是只向前转动的快照。dbSeeChanges假如另外一个用户要变动您正在编纂的数据,就会天生一个不测毛病。dbDenyWrite其他用户没法修正或增加纪录。dbDenyRead其他用户没法检察纪录(只限表范例纪录集)。dbReadOnly您只可检察纪录;而其他用户可修正它们。dbInconsistent同意纷歧致的更新(只限静态集范例纪录集)。dbConsistent只同意分歧的更新(只限静态集范例纪录集)。备注常量dbConsistent和dbInconsistent是互斥的。在给定的Open实例中只可以使用二者中的某一个,而不克不及同时利用。
优化基于ODBC的数据库交互
上面的倡议合用于任何触及ODBC的交互。这不但合用于ODBC数据库类,并且对那些与基于服务器的数据一同利用的DAO数据库类(DAO利用ODBC与数据源举行通讯)也合用。这些倡议中有良多都是来自于ColleenLambert的文章“ODBC:Architecture,Performance,andTuning”(位于MicrosoftDeveloperNetwork光盘)。经由过程查询驱动程序分歧性级别而尽量多天时用驱动程序的才能。假如不必要将使用程序移植到另外一个平台,就能够经由过程侧重存眷某个特定驱动程序的才能,使您使用程序的功能到达最好形态。制止挪用数据源目次例程。这些例程大概会很耗时。试着挪用例程一次,并将信息在当地高速缓存。切记可伸缩性,并得当地在当地和远程寄存数据。想法制止在二进位组合码框中填进来自远程数据源的数据。将SQLExtendedFetch用于转动。假如您的驱动程序撑持它,这是对ODBC数据源举行往返转动的最快办法。已筹办好的SQL语句运转得更快。消费一些工夫筹办SQL挪用,以便它们附加到HSTMT上。只要该句柄开释后,它们才会被开释。利用SQLBindCol而不是SQLGetData。SQLBindCol卖力列的存储和数据范例,如许您就不用为了局集而从头取得它。将SQLTypeInfo在当地高速缓存。某些数据源将该挪用作为存储历程举行处置,这实行起来大概会很泯灭本钱。只管少利用毗连,并制止重复地断开毗连和从头毗连。请记着,除ODBC驱动程序举行的挪用外,它的办理器也举行挪用以筹办毗连。一切这类开支加起来便可能年夜幅度下降使用程序的速率。将块提取用于多级驱动程序。多级驱动程序常常将收集功能看成本人事情的一部分利用,而且,依附于SQLFetch而不是SQLExtendedFetch会使您的使用程序蒙受收集操纵奇异举动的影响。经由过程周全懂得您的SQL来优化查询。这大概看似不言而喻,但很多程序员实践上只懂得无限数目的SQL命令。而对SQL语句的进一步进修与精晓,大概会使得使用程序有快与更快之分。利用高功能的DBMS。我们在本白皮书的开首就谈到了这个成绩,好的数据源是使用程序的才能与操纵的基本。在您的客户端包袱得起的条件下,利用最好的数据源。
上面的倡议是公用于DAO数据库类的。该列表中带星号的项次要是指与ODBC(基于服务器)数据源的交互。尽量利用链接的表而不是间接翻开的表。请拜见DAO“匡助”中的文章“DAOExternal:WorkingwithExternalDataSourcesandthetopicAccessingExternalDatabaseswithDAO”。在此列表的一切倡议中,这项倡议对功能的影响最为明显。*假如不更新数据,就不要利用静态集范例的纪录集。假如只向前转动,就利用向前转动的快照范例的纪录集。不用要的话不要从头到尾转动纪录,还要制止跳到年夜型表的最初一笔记录。只检索与检察必要的数据。用受限查询来限定要检索的纪录数目,而且只选择您必要的列。如许会使得请求经由过程收集传输的数据更少。利用高速缓冲。在类CDaoRecordset中,MFC撑持对指定命量的纪录举行高速缓存。一入手下手在将数据检索到高速缓存中时,如许做消费的工夫会较长;但在高速缓存中挪动并转动(已检索的)纪录要比转动检索每笔记录快一些。*封闭MFCCDaoRecordset工具中的双缓冲选项。这是改善功能的惯例办法,也合用于利用内部数据源的情形。关于量对照年夜的操纵,如大批增加纪录,请利用SQL间接传送查询。当利用SQL间接传送查询时,只需您一直经由过程统一毗连实行SQL间接传送查询,就只需一次性地设置毗连信息便可。*
制止利用会招致当地处置的查询。*不要利用含有远程列参数的用户界说函数。只在索引列上利用异类连接(在两个数据库中的表上连接),而且,假如您如许做的话,请注重到某些处置是在当地完成的。当会见内部数据时,只要在内部数据库没法实行操纵时,MicrosoftJet数据库引擎才会在当地处置数据。在当地实行的查询操纵有:查询顶部含有DISTINCT谓词的WHERE子句限定。一般,您能够从头布置查询,以盘算算计或在一切别的操纵后的DISTINCT查询数目。含有没有法远程处置的操纵的WHERE子句,如触及到远程列的用户界说函数。(请注重,这类情形下,只要那些没法远程处置的WHERE子句部分将在当地处置。)来自分歧数据源的表之间的连接。仅靠来自分歧数据源的表之间存在连接这一个前提,其实不能判定一切处置城市在当地产生。假如将限定发送给服务器,则只要相干的行会在当地处置。在聚合或DISTINCT谓词上的连接。不管怎样,准确地连接都是一门艺术,增加聚合函数(如AVG、MAX和MIN)或含有DISTINCT的谓词只会减慢查询。含有不为ODBC驱动程序所撑持的语法的外连接。桌面数据库驱动程序不但撑持左向外连接和右向外连接,还撑持内连接左向外连接中的右表和右向外连接中的左表都可用于内连接中。完整的和嵌套的外连接都不受撑持。
接上去的三项公用于您想要从远程数据源会见的数据。含有没有法远程处置的操纵的DISTINCT谓词。ORDERBY参数(假如远程数据源不撑持它们)。含有没有法远程处置的操纵的ORDERBY或GROUPBY参数。“不成远程处置的”表达式是没法由您的服务器求值的。不成远程处置的输入表达式(SELECT子句中的那些表达式)不强迫对您的查询举行当地求值,除非这些表达式呈现在算计查询、DISTINCT查询或UNION查询中。别的子句(如WHERE、ORDERBY、GROUPBY、HAVING等)中的不成远程处置的表达式最少强迫您的部分查询在当地求值。查询顶部含有DISTINCT选项的GROUPBY参数。利用SELECTDISTINCTROW,后跟GROUPBY子句。
上面的功效在一切已知的ODBC可会见的服务器上都是不被撑持的-一般是一些如许的操纵:它们是MicrosoftJet独有的对SQL的扩大,如:多级别GROUPBY参数,如在含有多个分组级其余呈报中利用的参数。TOP或TOPPERCENT谓词。有多个聚合的交织表查询或含有与GROUPBY子句婚配的ORDERBY子句的交织表查询。复杂的交织表查询能够发送到服务器。
别的用于优化使用程序的资本
VisualC++随带的文档应是关于MFC完成DAO的第一个信息来历。不但应当查阅MFCDAO示例和MFC手艺申明,还应查阅ClassLibraryReference和ProgrammingwithMFC。
有关DAO事情体例的别的信息,请查阅MicrosoftJetDatabaseEngineProgrammersGuide(MicrosoftPress出书)。
别的另有两篇保举文章,均位于MicrosoftDeveloperNetwork光盘上,它们是:“JetDatabaseEngineODBCConnectivity”,Black、Neil和StephenHecht。
这篇文章具体报告了MicrosoftJet怎样利用ODBC检索服务器数据。关于一切用DAO编写主要服务器使用程序的人,这都不掉为一篇必读文章。
“ODBC:Architecture,Performance,andTuning”,Lambert、Colleen。
本白皮书供应对ODBC事情体例的优秀概述,并以实际、有效的体例报告了功能成绩。

结论
MFC的基础观点(即为更庞大的手艺供应初级别笼统)在这些数据库类中是能够完成的。您能够选择ODBC或是DAO,以取得可以使客户端乐成的最好路径。
我们花了相称多的工夫反省改善功能的办法,看到了一些与在很多数据源上类的实行体例有关的办法,并向您提出了很多要思索的成绩。不论您做甚么,在决意之前都请坚持原型。我们但愿明天的集会能匡助您减少选择局限,并使您的决意更简单完成。
BDB源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

愤怒的大鸟 发表于 2015-1-19 18:06:17

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

小魔女 发表于 2015-2-4 16:50:20

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

蒙在股里 发表于 2015-2-10 04:23:59

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

谁可相欹 发表于 2015-2-28 19:40:25

我们学到了什么?思考问题的时候从表的角度来思考问

爱飞 发表于 2015-3-10 07:14:36

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

admin 发表于 2015-3-17 05:09:09

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。

变相怪杰 发表于 2015-3-17 05:09:13

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

山那边是海 发表于 2015-3-23 21:46:43

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
页: [1]
查看完整版本: MSSQL教程之MS SQL Server MFC DAO 类和 MFC ODBC ...