- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * An Introduction to Database System 数据库系统概论 An Introduction to Database System 第八章 数据库编程 An Introduction to Database System 第八章 数据库编程 8.1 嵌入式SQL 8.2 存储过程 8.3 ODBC编程 8.1 嵌入式SQL SQL语言提供了两种不同的使用方式: 交互式——直接在DBMS中使用SQL语言的方式 嵌入式——在高级语言中内嵌SQL语言的方式,如在C,C++,VB中嵌入SQL语言 8.1 嵌入式SQL 嵌入式SQL——形象认识 C语言中EXEC SQL后面接的语句为嵌入式SQL语句,如: EXEC SQL SELECT Sno,Cno,Grade INTO :Hsno,:Hcno,:Hgrade:Gradeid FROM SC WHERE Sno=:givensno AND Cno=:givencno; C++中封装了记录集 _RecordsetPtr m_Recordset; Cstring CmdText = “select Sno,Cno,Grade from SC where sno= givensno And con = givencno” m_Recordset.Open(CmdText ,… … ) 8.1 嵌入式SQL 嵌入式SQL——什么是游标?什么是current和非current形式? SQL语言的返回结果很多时候是一个集合,但 C语言中 EXEC SQL SELECT Sno,Cno,Grade INTO :Hsno,:Hcno,:Hgrade:Gradeid FROM SC WHERE Sno=:givensno AND Cno=:givencno; 一次只能赋值一个变量,因此定义游标作为SQL返回结果集的指针,游标的移动,表示当前取结果记录集的那一条记录,current就表示当前指针(游标)所指的记录,当结果集只有1条记录时,就是非current形式,可以不用游标! 8.1 嵌入式SQL 嵌入式SQL——什么是游标?什么是current和非current形式? C++中封装了记录集 _RecordsetPtr m_Recordset; Cstring CmdText = “select Sno,Cno,Grade from SC where sno= givensno And con = givencno” m_Recordset.Open(CmdText ,… … ) m_Recordset本身就是一个记录集首地址的指针,因此指针的移动就实现了C中的游标操作 C语言中嵌入式SQL比较原始,目前多用C++,VB,PB和java嵌入 An Introduction to Database System 第八章 数据库编程 8.1 嵌入式SQL 8.2 存储过程 8.3 ODBC编程 8.2 存储过程 存储过程和函数 存储过程(SQL-invoked procedure) 可以返回多个变量和表对象,只能执行不能在嵌入式SQL中调用,使用更为广泛 函数(SQL-invoked function) 只能返回一个值,或一个表对象,但是能在嵌入式SQL中调用,如写在From 之后 8.2 存储过程 存储过程——形象认识 如果我们需要修改某个表中的数据,在嵌入式SQL语言(C++)中,可以这么写(具体值可以用变量替换)方式1 adCmdText= “update sc set grade = ‘100’ where sno = ‘1001’ and cno = ‘1200’ ” m_Recordset.Open(CmdText ,… … ) 也可以这么写:(具体值可以用变量替换)方式2 Cstring procname = “execute update_grade @sno= ‘1001’, @cno= ‘1200’ ,@grade=‘100’” m_Command-Execute( vNull, vNull, adCmdText ); 然后在数据库中创建一个存储过程: update_grade,输入参数为sno 和cno,grade,其功能为根据学号和课程号传输修改成绩。 大家发现使用存储过程至少以下好处: 使用方式1时,程序员需要知道表的名称?表的结构?几个字段?什么取值范围?当数据库中的表名称或结构改变时,不得不修改C++的源代码 使用方式2时,程序员只需要知道存储过程的名称update_grade ,输入输出参数和功能就行了,当表的
原创力文档


文档评论(0)