第 20章 使用ADO操作SQL Server数据库.docx
- 文档编号:30640188
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:26
- 大小:152.66KB
第 20章 使用ADO操作SQL Server数据库.docx
《第 20章 使用ADO操作SQL Server数据库.docx》由会员分享,可在线阅读,更多相关《第 20章 使用ADO操作SQL Server数据库.docx(26页珍藏版)》请在冰豆网上搜索。
第20章使用ADO操作SQLServer数据库
第20章
CHAPTER20
使用ADO操作SQLServer数据库
练习题20参考答案
1.简述建立ADO记录集对象的两种方法。
答建立ADO记录集对象的两种方法如下。
(1)通过数据源名称(DSN)建立连接
在创建系统DSN之后,可以使用ADO的Connection对象通过DSN对数据库进行访问,访问之前先建立连接。
一个DSN连接通常需要的参数有:
DSN数据源名称、用户名和口令。
其使用格式如下:
ConnectionString="DSN=数据源名称;UID=用户名;PWD=口令"
其中,DSN指出数据源名称;UID指出登录数据库的用户名,也可以使用UserID指出用户名;PWD指出登录数据库的口令,也可以使用Password指出口令。
(2)直接使用数据库名称建立连接
直接使用数据库的文件名(比如Access、Paradox或FoxPro的数据库文件)或者SQLServer的数据库,也可建立数据库的连接。
其使用格式如下:
ConnectionString="Provider=提供程序名称;DSN=数据源名称;
DRIVER=驱动程序名称;SERVER=服务器名称;DATABASE=数据库名称;
UID=用户名;PWD=口令"
其中,Provider指出数据提供程序,默认为MSDASQL,为微软OLEDB,通常省略;DSN指出要打开的数据库对应的ODBC系统数据源,是可选参数;DRIVER指出要打开的数据库所用的驱动程序名称,例如,Access对应的驱动程序为MicrosoftAccessDriver(*.mdb),SQLServer对应的驱动程序为SQLServer,它是可选参数。
2.如何用记录集对象rst修改、插入和删除记录?
答修改rst数据的方法是先修改该记录集中当前记录各字段值,然后使用rst.Update命令将修改操作保存到rst中。
插入rst数据的方法是先使用rst.AddNew命令插入一个空记录,再修改该记录的各字段值,最后使用rst.Update命令将该记录保存到rst中。
删除rst数据的方法是先使用rst.Delete命令删除当前记录,然后使用rst.Update命令将删除操作保存到rst中。
3.设计一个窗体,浏览student表中的记录。
要求采用ADO编程。
解:
设计窗体的界面如图20.1所示。
“学生记录”框架中包含4个文本框(Text1数组)和两个单选按钮(Option1的标题为“男”,Option2的标题为“女”)。
它们的数据源均为空。
下方有4个命令按钮,从左到右是Command1(标题为“|<-”)、Command2(标题为“<-”)、Command3(标题为“->”)和Command4(标题为“->|”),其功能分别为移到第一个记录、前移一个记录、后移一个记录和移到最后一个记录。
在该窗体上设计如下事件过程:
PublicconnAsADODB.Connection
PublicrstAsADODB.Recordset
PrivateSubForm_Load()
Setconn=NewADODB.Connection
Setrst=NewADODB.Recordset
conn.ConnectionString="Provider=SQLOLEDB;DRIVER={SQLServer};"+_
"SERVER=LCB-PC;UID=sa;PWD=123456;DATABASE=school"
conn.CursorLocation=adUseServer
conn.Open
rst.LockType=adLockOptimistic
rst.CursorType=adOpenDynamic
rst.ActiveConnection=conn
rst.Open"SELECT*FROMstudent"
IfNotrst.EOFAndNotrst.BOFThen
rst.MoveFirst
Calldisp
Else
MsgBox"没有任何记录",vbOKOnly,"信息提示"
UnloadMe
EndIf
EndSub
PrivateSubCommand1_Click()'显示第一个记录
IfNotrst.BOFThen
rst.MoveFirst
Calldisp
EndIf
EndSub
PrivateSubCommand2_Click()'显示上一个记录
rst.MovePrevious
IfNotrst.BOFThen
Calldisp
Else
rst.MoveFirst
EndIf
EndSub
PrivateSubCommand3_Click()'显示下一个记录
rst.MoveNext
IfNotrst.EOFThen
Calldisp
Else
rst.MoveLast
EndIf
EndSub
PrivateSubCommand4_Click()'显示最后一个记录
IfNotrst.EOFThen
rst.MoveLast
Calldisp
EndIf
EndSub
PrivateSubForm_Unload(CancelAsInteger)
Setconn=Nothing
Setrst=Nothing
EndSub
PrivateSubdisp()'自定义过程
Text1(0).Text=rst.Fields(0)
Text1
(1).Text=rst.Fields
(1)
Ifrst.Fields
(2)="男"Then
Option1.Value=True
Else
Option2.Value=True
EndIf
Text1
(2).Text=rst.Fields(3)
Text1(3).Text=rst.Fields(4)
EndSub
本窗体的执行界面如图20.2所示。
图20.1习题3设计界面图20.2习题3执行界面
4.设计一个窗体,实现student表记录的复杂查询,并用列表框显示查询结果。
要求采用ADO编程。
解:
设计窗体的界面如图20.3所示。
“设置条件”框架中包含3个文本框(Text1数组)和两个单选按钮(Opt1的标题为“男”,Opt2的标题为“女”),另有两个命令按钮(selcmd1的标题为“确定”,selcmd2的标题为“重置”)。
上方有一个列表框List1,其下方有一个文本框Text2(Enabled属性设为False)和一个标签。
在该窗体上设计如下事件过程:
PublicrecsAsInteger
PublicconnAsADODB.Connection
PublicrstAsADODB.Recordset
PrivateSubForm_Load()
Setconn=NewADODB.Connection
Setrst=NewADODB.Recordset
conn.ConnectionString="Provider=SQLOLEDB;DRIVER={SQLServer};"+_
"SERVER=LCB-PC;UID=sa;PWD=123456;DATABASE=school"
conn.CursorLocation=adUseServer
conn.Open
rst.LockType=adLockOptimistic
rst.CursorType=adOpenDynamic
rst.ActiveConnection=conn
EndSub
PrivateSubselcmd1_Click()'确定
condstr=""'条件表达式,以下代码根据“设置条件”框架建立condstr
IfTrim(Text1(0).Text)<>""Then
Ifcondstr=""Then
condstr="snoLIKE'"+Trim(Text1(0).Text)+"%'"
EndIf
EndIf
IfTrim(Text1
(1).Text)<>""Then
Ifcondstr=""Then
condstr="snameLIKE'"+Trim(Text1
(1).Text)+"%'"
Else
condstr=condstr+"ANDsnameLIKE'"+Trim(Text1
(1).Text)+"%'"
EndIf
EndIf
IfTrim(Text1
(2).Text)<>""Then
Ifcondstr=""Then
condstr="sclassLIKE'"+Trim(Text1
(2).Text)+"%'"
Else
condstr=condstr+"ANDsclassLIKE'"+Trim(Text1
(2).Text)+"%'"
EndIf
EndIf
IfOpt1.Value=TrueThen
Ifcondstr=""Then
condstr="ssex='男'"
Else
condstr=condstr+"ANDssex='男'"
EndIf
ElseIfOpt2.Value=TrueThen
Ifcondstr=""Then
condstr="ssex='女'"
Else
condstr=condstr+"ANDssex='女'"
EndIf
EndIf
Ifcondstr<>""Then'有条件,根据condstr返回相应的记录集
OnErrorResumeNext
rst.Open"SELECT*FROMstudentWHERE"+condstr
Else'无条件,返回student表中所有记录
rst.Open"SELECT*FROMstudent"
EndIf
Calldisp
Text2.Text=recs
Ifrecs=0Then
MsgBox"没有任何满足条件的记录",vbOKOnly,"信息提示"
EndIf
rst.Close
EndSub
PrivateSubselcmd2_Click()'重置,将“设置条件”框架中的所有输入清空
Text1(0).Text=""
Text1
(1).Text=""
Text1
(2).Text=""
Opt1.Value=False
Opt2.Value=False
EndSub
PrivateSubdisp()
List1.Clear
recs=0
List1.AddItem"学号 姓名 性别出生日期 班号"
List1.AddItem"====================================="
DoWhileNotrst.EOF
List1.AddItemrst.Fields("sno")+""+rst.Fields("sname")+_
""+rst.Fields("ssex")+""+Format(rst.Fields("sbirthday"),_
"yyyy-mm-dd")+""+rst.Fields("sclass")
rst.MoveNext
recs=recs+1
Loop
EndSub
运行本窗体,查询95031班学生的界面如图20.4所示。
图20.3习题4设计界面图20.4习题4执行界面
5.设计一个窗体,实现student表记录的复杂查询,并用DataGrid1控件显示查询结果。
要求采用ADO编程。
解:
设计窗体的界面如图20.5所示。
“设置条件”框架中包含3个文本框(Text1数组)和两个单选按钮(Opt1的标题为“男”,Opt2的标题为“女”),另有两个命令按钮(selcmd1的标题为“确定”,selcmd2的标题为“重置”)。
上方有一个DataGrid1控件,其下方有一个文本框Text2(Enabled属性设为False)和一个标签。
在该窗体上设计如下事件过程:
PublicconnAsADODB.Connection
PublicrstAsADODB.Recordset
PrivateSubForm_Load()
Setconn=NewADODB.Connection
Setrst=NewADODB.Recordset
conn.ConnectionString="DSN=schoolDBS;UID=sa;PWD=123456"
conn.CursorLocation=adUseClient
conn.Open
rst.LockType=adLockOptimistic
rst.CursorType=adOpenStatic
rst.ActiveConnection=conn
rst.Open"SELECT*FROMstudent"
SetDataGrid1.DataSource=rst
DataGrid1.Columns(0).Caption="学号"
DataGrid1.Columns
(1).Caption="姓名"
DataGrid1.Columns
(2).Caption="性别"
DataGrid1.Columns(3).Caption="出生日期"
DataGrid1.Columns(4).Caption="班号"
DataGrid1.Columns(0).Width=600
DataGrid1.Columns
(1).Width=900
DataGrid1.Columns
(2).Width=550
DataGrid1.Columns(3).Width=1000
DataGrid1.Columns(4).Width=700
EndSub
PrivateSubselcmd1_Click()'确定
condstr=""'条件表达式,以下代码根据“设置条件”框架建立condstr
IfTrim(Text1(0).Text)<>""Then
Ifcondstr=""Then
condstr="snoLIKE'"+Trim(Text1(0).Text)+"%'"
EndIf
EndIf
IfTrim(Text1
(1).Text)<>""Then
Ifcondstr=""Then
condstr="snameLIKE'"+Trim(Text1
(1).Text)+"%'"
Else
condstr=condstr+"ANDsnameLIKE'"+Trim(Text1
(1).Text)+"%'"
EndIf
EndIf
IfTrim(Text1
(2).Text)<>""Then
Ifcondstr=""Then
condstr="sclassLIKE'"+Trim(Text1
(2).Text)+"%'"
Else
condstr=condstr+"ANDsclassLIKE'"+Trim(Text1
(2).Text)+"%'"
EndIf
EndIf
IfOpt1.Value=TrueThen
Ifcondstr=""Then
condstr="ssex='男'"
Else
condstr=condstr+"ANDssex='男'"
EndIf
ElseIfOpt2.Value=TrueThen
Ifcondstr=""Then
condstr="ssex='女'"
Else
condstr=condstr+"ANDssex='女'"
EndIf
EndIf
rst.Filter=condstr
recs=rst.RecordCount
Text2.Text=recs
EndSub
PrivateSubselcmd2_Click()'重置,将“设置条件”框架中的所有输入清空
Text1(0).Text=""
Text1
(1).Text=""
Text1
(2).Text=""
Opt1.Value=False
Opt2.Value=False
EndSub
运行本窗体,查询所有男学生的界面如图20.6所示。
图20.5习题5设计界面图20.6习题5执行界面
6.在SQLServer2005中设计一个存储过程maxfs,其功能是求最高分学生的姓名、课程和分数。
设计一个窗体,调用该存储过程显示结果。
解:
设计存储过程如下:
CREATEPROCEDUREmaxfs
(@s_namechar(10)OUTPUT,/*返回参数*/
@c_namechar(10)OUTPUT,/*返回参数*/
@sc_degreeintOUTPUT/*返回参数*/
)
AS
BEGIN
SELECT@s_name=s.sname,@c_name=ame,@sc_degree=sc.degree
FROMstudents,coursec,scoresc
WHEREs.sno=sc.snoANDo=oANDsc.degree=
(SELECTMAX(degree)FROMscore)
END
GO
设计一个窗体的界面如图20.7所示。
“最高分情况”框架中包含3个文本框(Text1、Text2和Text3)和3个标签。
另有一个命令按钮。
在窗体上设计如下事件过程:
PrivateSubCommand1_Click()
DimconnAsADODB.Connection
DimcmdAsADODB.Command
Dimpar1AsADODB.Parameter
Dimpar2AsADODB.Parameter
Dimpar3AsADODB.Parameter
'声明并初始化一个ADO的Connection对象
Setconn=NewADODB.Connection
'使用Connection对象的ConnectionString属性,直接指定连接的数据库
conn.ConnectionString="Provider=SQLOLEDB;DRIVER={SQLServer};"+_
"SERVER=LCB-PC;UID=sa;PWD=123456;DATABASE=school"
'使用Connection对象的Open方法连接数据库
conn.Open
Setcmd=NewADODB.Command
'指定cmd的当前连接为conn
cmd.ActiveConnection=conn
'设置要执行的是存储过程average
cmd.CommandType=adCmdStoredProc
cmd.CommandText="maxfs"'maxfs是SQLServer存储过程
'设置第一个参数,并将其添加到Parameters集合中
Setpar1=NewADODB.Parameter
par1.Direction=adParamOutput
par1.Type=adChar
par1.Size=10
cmd.Parameters.Appendpar1
'设置第二个参数,并将其添加到Parameters集合中
Setpar2=NewADODB.Parameter
par2.Direction=adParamOutput
par2.Type=adChar
par2.Size=10
cmd.Parameters.Appendpar2
'设置第三个参数,并将其添加到Parameters集合中
Setpar3=NewADODB.Parameter
par3.Direction=adParamOutput
par3.Type=adInteger
cmd.Parameters.Appendpar3
'执行命令
cmd.Execute
'将执行后的返回参数输出到窗体上
Text1.Text=par1.Value
Text2.Text=par2.Value
Text3.Text=par3.Value
conn.Close
EndSub
运行本窗体,单击命令按钮,结果如图20.8所示。
图20.7习题6设计界面图20.8习题6执行界面
上机实验题15参考答案
设计一个与第19章上机实验题功能相似的窗体,要求采用ADO编程。
操作过程
设计一个窗体,其设计界面如图20.9所示。
图20.9上机实验题15设计界面
其中有一个DataGrid控件DataGrid1,只需通过其属性页修改HeadFont字体大小,其余均不作修改。
“职工记录”框架中包含5个文本框(Text1数组,分别对应“职工号”、“姓名”、“出生日期”、“参加工作”和“部门号”)、两个单选按钮(Opt1标题为“男”,Opt2标题为“女”)和一个复选框Chk1(对应“党员否”)。
它们的数据源均为空。
数据导航框架中有4个命令按钮,从左到右是tp(标题为“|<-”)、prev(标题为“<-”)、nxt(标题为“->”)和bott(标题为“->|”),其功能分别为移到第一个记录、前移一个记录、后移一个记录和移到最后一个记录。
数据操作框架中部有5个操作命令按钮,分为两组,第一组为Comm1(标题为“添加”)、Comm2(标题为“编辑”)和Comm3(标题为“删除”);第二组为Comm4(标题为“确定”)和Comm5(标题为“取消”)。
这两组命令按钮同一时刻只出现其中一组。
在该窗体上设计如下事件过程:
PublicselAsInteger'存放前一次的用户操作
PublicconnAsADODB.Connection
PublicrstAsADODB.Rec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 20章 使用ADO操作SQL Server数据库 20 使用 ADO 操作 SQL Server 数据库