




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL语言入门第一课 简介SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。下面,我们就来详细介绍一下SQL语言的基本知识。一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。数据库中的所有数据或信息都被保存在这些数据库表格中。数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。以下,是一个名为太平洋网络学院的数据库表格的实例。栏目 用户群 新手上路 电脑初学者 软件教室 一般的电脑用户 设计教室 电脑设计爱好者 开发教室 电脑编程人员 该表格中“栏目”, “用户群”就是两个不同的列,而表格中的每一行则包含了具体的表格数据。1. 创建表格2. 数据查询3. 向表格中添加、更新、删除记录4. 删除数据库表格 SQL语言入门教程:第二课 创建表格第二课 创建表格SQL语言中的create table语句被用来建立新的数据库表格。create table语句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:create table tablename(column1 data type constraint,column2 data type constraint,column3 data type constraint);举例如下:create table employee(firstname varchar(15),lastname varchar(20),age number(3),address varchar(30),city varchar(20);简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或列的名称。数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。SQL语言中较为常用的数据类型为:char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。varchar(size):可变长度字符串,最大长度由size设定。number(size):数字类型,其中数字的最大位数由size设定。Date:日期类型。number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not null和primary key等。not null用来规定表格中某一列的值不能为空。primary key则为表格中的所有记录规定了唯一的标识符。SQL语言入门教程:第三课 数据查询第三课 数据查询在众多的SQL命令中,select语句应该算是使用最频繁的。select语句主要被用来对数据库进行查询并返回符合用户查询标准的结果数据。Select语句的语法格式如下:select column1 , column2,etc from tablenamewhere condition;( 表示可选项)select语句中位于select关键词之后的列名用来决定那些列将作为查询结果返回。用户可以按照自己的需要选择任意列,还可以使用通配符“*”来设定返回表格中的所有列。select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。Select语句中的where可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在where条件从句中可以使用以下一些运算符来设定查询标准:= 等于 大于= 大于等于= 小于等于 不等于除了上面所提到的运算符外,LIKE运算符在where条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%;(注意,字符串必须被包含在单括号内)上述SQL语句将会查询所有名称以E开头的姓名。或者,通过如下语句:select * from employeewhere firstname = May;查询所有名称为May的行。SQL语言入门教程:第四课 向表格中添加、更新、删除记录第四课 向表格中添加、更新、删除记录添加新记录SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:insert into tablename(first_column,.last_column)values (first_value,.last_value);例如:insert into employee(firstname, lastname, age, address, city)values (Li, Ming, 45, No.77 Changan Road, Beijing”);简单来说,当向数据库表格中添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号中列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。更新记录SQL语言使用update语句更新或修改满足规定条件的现有记录。update语句的格式为:update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value;例如:update employeeset age = age+1where first_name= Maryand last_name= Williams;使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。删除记录SQL语言使用delete语句删除数据库表格中的行或记录。Delete语句的格式为:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere lastname = May;简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句中设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格中的所有记录将全部被删除。SQL语言入门教程:第五课 删除数据库表格第五课 删除数据库表格在SQL语言中使用drop table命令删除某个表格以及该表格中的所有记录。drop table命令的使用格式为:drop table tablename;例如:drop table employee;如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。drop table命令的作用与删除表格中的所有记录不同。删除表格中的全部记录之后,该表格仍然存在,而且表格中列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。以Store_Information数据表为例,我们可以在GROUP BY一节中所使用的SQL命令中设置如下字段和数据表别名:SELECT A1.store_name Store, SUM(Sales) Total SalesFROM Store_Information A1GROUP BY A1.store_name查询结果显示为:Store Total SalesLos Angeles $1800San Diego $250Boston $700一、资料定义ddl(data definition language) 资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。、建表格:create table table_name( column1 datatype not null not null primary key, column2 datatype not null,.)说明:datatype -是资料的格式,详见表。nut null -可不可以允许资料有空的(尚未有资料填入)。primary key -是本表的主键。、更改表格alter table table_name add column column_name datatype 说明:增加一个栏位(没有删除某个栏位的语法。)lter table table_name add primary key (column_name)说明:更改表得的定义把某个栏位设为主键。alter table table_name drop primary key (column_name)说明:把主键的定义删除。、建立索引create index index_name on table_name (column_name)说明:对某个表格的栏位建立索引以增加查询时的速度。、删除drop table_namedrop index_name二、资料形态 datatypessmallint 16 位元的整数。interger32 位元的整数。decimal(p,s)p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数後有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float32位元的实数。double64位元的实数。char(n)n 长度的字串,n不能超过 254。varchar(n)长度不固定且其最大长度为 n 的字串,n不能超过 4000。graphic(n)和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为支援两个字元长度的字体,例如中文字。vargraphic(n)可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。date包含了 年份、月份、日期。time包含了 小时、分钟、秒。timestamp包含了 年、月、日、时、分、秒、千分之一秒。三、资料操作 dml(data manipulation language)资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:、增加资料:insert into table_name (column1,column2,.) values ( value1,value2, .)说明:1.若没有指定column 系统则会按表格内的栏位顺序填入资料。2.栏位的资料形态和所填入的资料必须吻合。3.table_name 也可以是景观 view_name。insert into table_name (column1,column2,.) select columnx,columny,. from another_table说明:也可以经过一个子查询(subquery)把别的表格的资料填入。、查询资料:基本查询select column1,columns2,. from table_name说明:把table_name 的特定栏位资料全部列出来select * from table_name where column1 = xxx and column2 yyy or column3 zzz说明:1.*表示全部的栏位都列出来。2.where 之後是接条件式,把符合条件的资料列出来。select column1,column2 from table_name order by column2 desc说明:order by 是指定以某个栏位做排序,desc是指从大到小排列,若没有指明,则是从小到大排列组合查询组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。select * from table1,table2 where table1.colum1=table2.column1说明:1.查询两个表格中其中 column1 值相同的资料。2.当然两个表格相互比较的栏位,其资料形态必须相同。3.一个复杂的查询其动用到的表格可能会很多个。整合性的查询:select count (*) from table_name where column_name = xxx说明:查询符合条件的资料共有几笔。select sum(column1) from table_name说明:1.计算出总和,所选的栏位必须是可数的数字形态。2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。select column1,avg(column2) from table_name group by column1 having avg(column2) xxx说明:1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。 2.having : 必须和 group by 一起使用作为整合性的限制。复合性的查询select * from table_name1 where exists ( select * from table_name2 where conditions )说明:1.where 的 conditions 可以是另外一个的 query。2.exists 在此是指存在与否。select * from table_name1 where column1 in ( select column1 from table_name2 where conditions )说明:1. in 後面接的是一个集合,表示column1 存在集合里面。2. select 出来的资料形态必须符合 column1。 其他查询select * from table_name1 where column1 like x% 说明:like 必须和後面的x% 相呼应表示以 x为开头的字串。select * from table_name1 where column1 in (xxx,yyy,.)说明:in 後面接的是一个集合,表示column1 存在集合里面。select * from table_name1 where column1 between xx and yy说明:between 表示 column1 的值介於 xx 和 yy 之间。、更改资料:update table_name set column1=xxx where conditoins说明:1.更改某个栏位设定其值为xxx。2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。、删除资料:delete from table_name where conditions说明:删除符合条件的资料。说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:(1)如果是access数据库,则为:where mydate#2000-01-01# (2)如果是oracle数据库,则为:where mydatecast(2000-01-01 as date) 或:where mydateto_date(2000-01-01,yyyy-mm-dd)在delphi中写成:thedate=2000-01-01;query1.sql.add(select * from abc where mydatecast(+thedate+ as date); 如果比较日期时间型,则为:where mydatetimeto_date(2000-01-01 10:00:01,yyyy-mm-dd hh24:mi:ss)SQL数据操作基础(初级)为了建立交互站点,你需要使用数据库来存储来自访问者的信息。例如,你要建立一个职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息。创建动态网叶也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息。你将会发现,在许多情况下需要使用数据库。在这一章里,你将学会怎样使用“结构化查询语言”(SQL来操作数据库。SQL语言是数据库的标准语言。在Active Sever Pages 中,无论何时你要访问一个数据库,你就要使用SQL语言。因此,掌握好SQL对ASP编程是非常重要的。注意:你可以把“SQL”读作“sequel”,也可以按单个字母的读音读作SQL。 两种发音都是正确的,每种发音各有大量的支持者。在本书里,认为“SQL”读作“sequel”。通过这一章的学习,你将理解怎样用SQL实现数据库查询,你将学会怎样使用这种查询从数据表中取出信息,最后,你将学会怎样设计和建立自己的数据库。注意:通过下面几章对SQL的介绍,你将对SQL有足够的了解,从而可以有效地使用Active Sever Pages。但是,SQL是一种复杂的语言,本书不可能包括它的全部细节。要全面掌握SQL语言,你需要学习在Microsoft SQL Sever 中使用SQL。你可以到附近的书店去买一本Microsoft SQL Sever 6.5。SQL介绍:本书假设你是在SQL操作Microsoft SQL Sever 的数据库。你也可以用SQL操作许多其它类型的数据库。SQL是操作数据库的标准语言。(事实上,关于SQL语言有一个专门的ANSI标准注意:不要在你的站点上试图用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同时服务于许多用户,如果你希望你的站点有较高的访问率,MS Access是不能胜任的。在学习SQL的细节之前,你需要理解它的两大特点。一个特点容易掌握,另一个掌握起来有点困难。第一个特点是所有SQL数据库中的数据都存储在表中。一个表由行和列组成。例如,下面这个简单的表包括name 和e-mail address:Name Email AddressBill Gates president Clinton Stephen Walther 这个表有两列(列也称为字段,域:Name和Email Address。有三行,每一行包含一组数据。一行中的数据组合在一起称为一条记录。无论何时你向表中添加新数据,你就添加了一条新记录。一个数据表可以有几十个记录,也可以有几千甚至几十亿个记录。虽然你也许永远不需要存储十亿个Email地址,但知道你能这样做总是好的,也许有一天你会有这样的需要。你的数据库很有可能包含几十个表,所有存储在你数据库中的信息都被存储在这些表中。当你考虑怎样把信息存储在数据库中时,你应该考虑怎样把它们存储在表中。SQL的第二个特点有些难于掌握。这种语言被设计为不允许你按照某种特定的顺序来取出记录,因为这样做会降低SQL Sever取记录的效率。使用SQL,你只能按查询条件来读取记录。当考虑如何从表中取出记录时,自然会想到按记录的位置读取它们。例如,也许你会尝试通过一个循环,逐个记录地扫描,来选出特定的记录。在使用SQL时,你必须训练自己,不要有这种思路。假如你想选出所有的名字是“Bill Gates”的记录,如果使用传统的编程语言,你也许会构造一个循环,逐个查看表中的记录,看名字域是否是“Bill Gates”。这种选择记录的方法是可行的,但是效率不高。使用SQL,你只要说,“选择所有名字域等于Bill Gates的记录”,SQL就会为你选出所有符合条件的记录。SQL会确定实现查询的最佳方法。建设你想取出表中的前十个记录。使用传统的编程语言,你可以做一个循环,取出前十个记录后结束循环。但使用标准的SQL查询,这是不可能实现的。从SQL的角度来说,在一个表中不存在前十个记录这种概念。开始时,当你知道你不能用SQL实现某些你感觉应该能实现的功能,你会受到挫折。你也许会以头撞墙甚至想写恶毒的信件给SQL的设计者们。但后来你会认识到,SQL的这个特点不仅不是个限制,反而是其长处。因为SQL不根据位置来读取记录,它读取记录可以很快。综上所述,SQL有两个特点:所有数据存储在表中,从SQL的角度来说,表中的记录没有顺序。在下一节,你将学会怎样用SQL从表中选择特殊的记录。使用SQL从表中取记录。SQL的主要功能之一是实现数据库查询。如果你熟悉Internet 引擎,那么你已经熟悉查询了。你使用查询来取得满足特定条件的信息。例如,如果你想找到有ASP信息的全部站点,你可以连接到 Yahoo!并执行一个对Active Sever Pages的搜索。在你输入这个查询后,你会收到一个列表,表中包括所有其描述中包含搜索表达式的站点。多数Internet 引擎允许逻辑查询。在逻辑查询中,你可以包括特殊的运算符如AND、OR和NOT,你使用这些运算符来选择特定的记录。例如,你可以用AND来限制查询结果。如果你执行一个对Active Sever Pages AND SQL的搜索。你将得到其描述中同时包含Active Sever Pages 和SQL的记录。当你需要限制查询结果时,你可以使用AND。如果你需要扩展查询的结果,你可以使用逻辑操作符OR。例如,如果你执行一个搜索,搜索所有的其描述中包含Active Sever Pages OR SQL的站点,你收到的列表中将包括所有其描述中同时包含两个表达式或其中任何一个表达式的站点。如果你想从搜索结果中排除特定的站点,你可以使用NOT。例如,查询“Active Sever Pages ”AND NOT “SQL”将返回一个列表,列表中的站点包含Active Sever Pages,但不包含SQL。当必须排除特定的记录时,你可以使用NOT。用SQL执行的查询与用Internet搜索引擎执行的搜索非常相似。 当你执行一个SQL查询时,通过使用包括逻辑运算符的查询条件,你可以得到一个记录列表。此时查询结果是来自一个或多个表。SQL查询的句法非常简单。假设有一个名为email_table 的表,包含名字和地址两个字段,要得到Bill Gates 的e_mail地址,你可以使用下面的查询:SELECT email from email_table WHERE name=Bill Gates当这个查询执行时,就从名为email_table的表中读取Bill Gates的e_mail 地址。这个简单的语句包括三部分: SELECT语句的第一部分指名要选取的列。在此例中,只有email列被选取。当执行 时,只显示email列的值 。 SELECTT语句的第二部份指明要从哪个(些)表中查询数据。在此例中,要查询的表名为email_table 。 最后,SELECT语句的WHERE子句指明要选择满足什么条件的记录。在此例中,查询条件为只有name列的值为Bill Gates 的记录才被选取。Bill Gates很有可能拥有不止一个email地址。如果表中包含Bill Gates的多个email地址。用上述的SELECT语句可以读取他所有的email地址。SELECT语句从表中取出所有name字段值为Bill Gates 的记录的email 字段的值。前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取Bill Gates 或Clinton总统的所有email地址,你可以使用下面的查询语句:SELECT email FROM email_table WHERE name=Bill Gates OR name=president Clinton此例中的查询条件比前一个复杂了一点。这个语句从表email_table中选出所有name列为Bill Gates或president Clinton的记录。如果表中含有Bill Gates或president Clinton的多个地址,所有的地址都被读取。SELECT语句的结构看起来很直观。如果你请一个朋友从一个表中为你选择一组记录,你也许以非常相似的方式提出你的要求。在SQL SELECT语句中,你“SELECT特定的列FROM一个表WHERE某些列满足一个特定的条件”。下一节将介绍怎样执行SQL查询来选取记录。这将帮助你熟悉用SELECT语句从表中取数据的各种不同方法。SQL INSERT语法使用技巧一例在SQL Server在线图书(SSBOL)中,请定位sp_dbcmptlevel,然后找出描述6.0、6.5和7.0之间版本兼容性的数据表。你可以注意到INSERT SQL语句有如下所示的语法。INSERT XSELECT select_listsintosY早期的SQL Server数据库(6.0或者6.5版本)可以正确地解析这样的语句,但新的SQL Server数据库(7.0或者8.0版本)就不能正确解析了。虽然语法中的Y在任何兼容级设置下都不用做插入操作的接收者,但旧的数据库还允许这样的语法存在。这种语法在新的数据库中都因其更严格的语法检查而无法执行,然而,这种严格要求却让用户编写的代码更具稳固性。以下是一个可以在SQL Server 7.0或者2000上运行的简单脚本,该脚本说明了以上的语法如何通过旧数据库的测试但却不能通过新数据库的检查。SET NOCOUNT OFFGOUSE pubsGOIF EXISTS (SELECT * FROM sysobjectsswherestype =U AND name = test)BEGINDROP TABLE testENDGOCREATE TABLE test (col1 INT NULL, col2 INT NULL)GOEXEC sp_dbcmptlevel pubs, 65GOINSERT testSELECT 1 ,1sintosyGOEXEC sp_dbcmptlevel pubs, 70GOINSERT testSELECT 2 ,1sintosyGO不当编写SQL语句导致系统不安全在一般的多用户应用系统中,只有拥有正确的用户名和密码的用户才能进入该系统。我们通常需要编写用户登录窗口来控制用户使用该系统,这里以Visual Basic+ADO为例:一、漏洞的产生用于登录的表Users(name,pwd)建立一个窗体Frmlogin,其上有两个文本框Text1,Text2和两个命令按钮cmdok,cmdexit。两个文本框分别用于让用户输入用户名和密码,两个命令按钮用于“登录”和“退出”。1、定义Ado Connection对象和ADO RecordSet对象:Option ExplicitDim Adocon As ADODB.ConnectionDim Adors As ADODB.Recordset2、在Form_Load中进行数据库连接:Set Adocon = New ADODB.ConnectionAdocon.CursorLocation = adUseClientadocon.Open Provider=Microsoft.jet.OLeDB.4.0.1;Data Source= & _App.Path & est.mdb; cmdok中的代码Dim sqlstr As Stringsqlstr = select * from usersswheresname= & Text1.Text & _ and pwd= & Text2.Text & Set adors = New ADODB.Recordset Set Adors=Adocon.Execute(sqlstr)If Adors.Recordcount0 Then /或If Not Adors.EOF then. MsgBox Pass /通过验证Else. MsgBox Fail /未通过验证End if运行该程序,看起来这样做没有什么问题,但是当在Text1中输入任意字符串(如123),在Text2中输入a or a=a时,我们来看sqlstr此时的值:select * from usersswheresname=123 and pwd=a or a=a 执行这样一个SQL语句,由于or之后的a=a为真值,只要users表中有记录,则它的返回的eof值一定为False,这样就轻易地绕过了系统对于用户和密码的验证。这样的问题将会出现在所有使用select * from usersswheresname= & name & and pwd= & password &的各种系统中,无论你是使用那种编程语言。二、漏洞的特点在网络上,以上问题尤其明显,笔者在许多网站中都发现能使用这种方式进入需要进行用户名和密码验证的系统。这样的一个SQL漏洞具有如下的特点:1、与编程语言或技术无关无论是使用VB、Delphi还是ASP、JSP。2、隐蔽性现有的系统中有相当一部分存在着这个漏洞,而且不易觉察。3、危害性不需要进行用户名或密码的猜测即可轻易进入系统。三、解决漏洞的方法1、控制密码中不能出现空格。2、对密码采用加密方式。这里要提及一点,加密不能采用过于简单的算法,因为过于简单的算法会让人能够构造出形如a or a=a的密文,从而进入系统。3、将用户验证和密码验证分开来做,先进行用户验证,如果用户存在,再进行密码验证,这样一来也能解决问题。 在VFP里操作和管理SQL SERVER(介绍SQL-DMO) (1)(5个贴子全部合并在这里了,注意第5页里有实例 /bbs/dispbbs.asp?BoardID=1&id=180379&replyID=189716&star=5) 在论坛混了这么多年, 看到的一个很明显的趋势是, 用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 FilesMicrosoft SQL Server80ToolsBinn目录里, 在同一目录里还有个帮助文件Sqldmo80.hlp. 如果你在程序里不能使用DMO, 找到这个DLL文件,注册一下,就可以了。另外在C:Program FilesMicrosoft SQL Server80Tools DevtoolsSamplesSqldmo 目录下,有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:TempPUBBack.Dat &指定目标文件oBackup.SQLBackup(oServer) &运行备份命令,速度很快的*注: 备份数据时默认为追加方式,可以加一句oBackup.initialize=.T. 这样就会覆盖原来的文件。或者每次BACKUP时用不同的文件名,比如把日期作为文件名的一部分. *备份恢复oRestore=CreateObject(SQLDMO.Restore)oRestore.Database=PUBSoRestore.Files=D:TempPUBBack.DatoRestore.SQLRestore(oServer) &先试不加密码,备份失败oRestore.P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 19158-2025集装及站用压缩氢气铝内胆碳纤维全缠绕气瓶
- 足球场、体育场可行性研究报告
- 防汛知识培训评价课件
- 无抵押房屋租赁协议书7篇
- 投诉调解协议书5篇
- 黑龙江省大庆市2025-2026学年高三上学期第一次月考历史试卷
- 部队安全保卫知识培训课件
- 2024-2025学年辽宁省朝阳市龙城区北师大版五年级下册期末测试数学试卷(含部分答案)
- 边防军人血性的课件
- 边塞诗歌三首课件
- 2025年4月自考02204经济管理试题及答案
- 统战工作培训课件
- 2025年市级科技馆招聘笔试重点
- 2025西电考试题及答案
- 泡茶的步骤课件
- 2025年先兆流产的护理查房
- 人教版(2024)八年级上册数学全册教案
- 2025年部编版新教材语文九年级上册教学计划(含进度表)
- 水利建筑工程概算定额(上册)2025版
- (高清版)DB11∕T 2440-2025 学校食堂病媒生物防制规范
- GB/T 7324-2010通用锂基润滑脂
评论
0/150
提交评论