⽤VFP和SQL SERVER来做系统的友越来越多。怎么从VFP⾥来操作或者管理SQL SERVER也成为很多⼈关⼼的问题。对SQL SERVER的数据操作,可以⽤视图,SPT或者ADO来做,但对服务器本⾝的管理,似乎只有⽤SPT来发送⼀些命令了。其实,微软为客户端操作SQL SERVER开发了⼀套完整的⼯具,这就是SQL - DMO (Distributed Management Objects).这是⼀套COM组件,可以在各种语⾔⾥使⽤, VFP⾥⾃然也可以⽤了。
我准备花点时间,写些这⽅⾯的介绍⽂章,然后做个实例,算是我通过MCDBA后,给⼤家的礼物吧。下⾯的介绍和例⼦,是针对SQL SERVER 2000和VFP7的。
⼀. ⽤SQL -DMO的必要性
⼤部分VFPER开发的程序,都是中⼩规模的系统,因为这是VFP最适⽤的范围。⽽这样的系统,很多情况下是,客户端没有专业IT⼈⼠维护,更不要说专门的DBA了。对于使⽤SQL SERVER的系统,就带来了⼀些问题。 SQL SERVER是⼀套⽐较⼤的数据库专业软件,是经常需要维护和清理的,⽽我们这些系统开发者,总不能⽼跑去⽤户那⾥做维护⼯作吧,尤其对商业软件来说,这是很⼤的成本了。如果可以把对SQL SERVER的维护⼯作放到⾃⼰的程序⾥,甚⾄把SQL SERVER的安装⽆缝并⼊到⾃⼰的程序的安装包⾥,相信⼤家都会很乐意的。 DMO的功能就能满⾜我们的这些需要。通过它,可以从程序⾥⽤命令⽅式来操作SQL SERVER:停⽌/启动服务,建⽴数据库和表,添加⽤户和权限,备份/恢复数
据库,数据导⼊/导出/发布... DMO的作⽤就是把我们能在Enterprise Manager⾥完成的功能,完全⽤代码来做.
⼆. 微软的桌⾯数据引擎 (Desktop Database Engine)
我们都知道SQL SERVER 2000有四个版本: 个⼈版,开发者版,标准班和企业版. 其实,还有⼀个版本,就是桌⾯数据引擎(DDE)。 DDE⼏乎具有
SQL SERVER标准版和企业版的所有功能,不能⽀持的只是少数⼏个不常⽤的功能。⽽它和其它版本的区别是, DDE没有任何图形管理界⾯,没有ENTERPRISE MANAGER,没有查询分析器等等⼯具。对它的管理,主要是通过DMO或者专门的API来进⾏,它的另⼀个优点是,提供了安装程序,可以直接加到第3⽅软件⾥进⾏安装。每个版本的SQL SERVER CD⾥都带有DDE,在MSDE⽬录下,运⾏SETUP程序就可以安装。⾄于怎么把它加到⾃⼰的程序⾥安装,⼤家查⼀下SQL SERVER的帮助⽂件就可以到。
DDE的限制是:只适宜中⼩型系统(⽐如没有5个以上的⽤户同时连接和运⾏⼤型SQL命令),如果同时访问的⽤户很多,DDE就会⽐正常的SQL SERVER慢了。
这样, DDE+DMO就可以实现我们上⾯所要求的功能了。这种做法甚⾄可以不让⽤户知道你是在使
⽤SQL SERVER做为数据库。当然, DMO不是只能操作DDE,它可以操作所有版本的SQL SERVER。
三. DMO的安装
其实DMO主要就是⼀个DLL⽂件⽽已: SQLDMO.DLL。具体位置在C:\Program Files\Microsoft SQL Server\80\Tools\Binn ⽬录⾥, 在同⼀⽬录⾥还有个帮助⽂件Sqldmo80.hlp. 如果你在程序⾥不能使⽤DMO,到这个DLL⽂件,注册⼀下,就可以了。另外在C:\Program Files\Microsoft SQL Server\80\Tools\ Devtools\Samples\Sqldmo ⽬录下,有SQLDMO的例⼦,但都是VB和VC++的。VB的例⼦和VFP很接近的.
安装sql server数据库没到 四. 初步接触DMO
在这⾥写⼏个简单的句⼦,来看看DMO的强⼤. 这些命令可以直接在命令窗⼝⾥⼀⾏⼀⾏测试, 只是⽤它们来显⽰数据库的信息。⾄于添加数据库,数据表,备份和恢复等⽐较复杂的功能,得在实例⾥做。
oServer=CreateObject("SQLDMO.SQLServer") &&建⽴SERVER对象
oServer.Connect("Snoopy","sa","778899") &&连接到你的服务器
? oServer.Databases.Count &&显⽰服务器上的数据库总数
? oServer.Databases.Item(1).Name &&显⽰第⼀个数据库的名字
oDB=oServer.Databases("PUBS") &&建⽴数据库对象
? oDB.Tables.Count &&显⽰库⾥表的数⽬
oTable=oDB.Tables("Titles") &&建⽴表对象
? oTable.Rows &&显⽰表⾥的记录数
? oTable.Columns.Count &&显⽰表的列数
**显⽰列的属性
? oTable.Columns(1).Name
? oTable.Columns(1).type
? oTable.Columns(1).Datatype
? oTable.Columns(1).Identity
? oTable.Columns(1).IsPrimaryKey
备份和恢复数据库
oServer=CreateObject("SQLDMO.SQLServer") &&建⽴SERVER对象
oServer.Connect("Snoopy","sa","778899") &&连接到你的服务器
**备份
oBackup=CreateObject("SQLDMO.Backup") &&建⽴备份对象
oBackup.Database="PUBS" &&指定备份数据库
oBackup.Password="8899" &&给备份⽂件加密码
oBackup.Files="D:\Temp\PUBBack.Dat" &&指定⽬标⽂件
oBackup.SQLBackup(oServer) &&运⾏备份命令,速度很快的
***注:备份数据时默认为追加⽅式,可以加⼀句
oBackup.initialize=.T.
这样就会覆盖原来的⽂件。或者每次BACKUP时⽤不同的⽂件名,⽐如把⽇期作为⽂件名的⼀部分.
**备份恢复
oRestore=CreateObject("SQLDMO.Restore")
oRestore.Database="PUBS"
oRestore.Files="D:\Temp\PUBBack.Dat"
oRestore.SQLRestore(oServer) &&先试不加密码,备份失败
oRestore.Password="8899"
oRestore.SQLRestore(oServer)
SQL SERVER提供⼏种数据库备份⽅式,
⼀种是完整备份 (Full Backup), 第⼆种是差异备份(Differential Backup),第三种是⽇志备份,第四种是⽂件备份
完整备份是把整个数据库做个备份,差异备份只是备份进⾏了完整备份后数据库⾥的新变化。当数据库很⼤时,完整备份很费空间和时间,可以根据情况定期做,⽐如每周或者每⽉做⼀次完整备份。其它时间可以进⾏差异备份,⽐如每天⼀次,或者半天⼀次,也可以结合进⾏⽇志备份。⽂件备份是直接备份数据库的数据和⽇志⽂件。和在操作系统⾥做备份⼀样. 在恢复的时候,只要先恢复完整备份,然后恢复最后⼀个差异备份就可以。如果有⽇志备份,还需要恢复差异备份后所做的⽇志备份。
备份种类通过备份对象的Action属性来决定.
oBackup.Action=0 && 参数: 0 - 完整备份,1- 差异备份, 2- ⽂件备份, 3 -⽇志备份
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论