




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验3 ODBC编程1实验目的与要求(1)了解C/S结构的应用系统设计与实现的全过程。(2)学会开发工具与数据库互连的方法。(3)能使用开发工具操纵数据库。2实验环境要求(1)服务器端 SQL Server 2005(2)客户端 VC6.0(3)服务器端与客户端网络互连3实验内容利用已有的“教师授课管理数据库”,建立“教师授课管理系统”。(1)维护“教师授课管理数据库” 对“教师授课管理数据库”,检查所有的表的相关约束设置,并准备好部分数据(注意:各表中的数据必须符合约束规则)。(2)开发客户端数据库应用程序1)划分应用程序的功能模块 图书销售管理系统可以由五个模块组成,各模块的功能如下:a)教师管理 教师信息查询增加教师 删除教师 修改教师信息b)学生管理 学生信息查询增加学生 删除学生 修改学生信息c)课程管理 课程信息查询增加课程 删除课程 修改课程信息d)教师授课管理 教师授课信息查询 增加教师授课信息 删除教师授课信息 修改教师授课信息e) 学生选课及成绩管理 学生选课 学生成绩录入 学生成绩查询f)数据管理数据备份数据恢复要求:列出各子功能模块所涉及到的表,并说明对表所做的操作。2)应用程序的实现各功能模块均由函数实现,在主函数中,建立一个主菜单列表,由用户选择要实现的功能,调用相应的功能函数。主函数如下:int main()int k;while(1)coutn;coutn; cout *n; cout 1.教师管理n; cout 2.学生管理n; cout 3.课程管理n; cout 4.教师授课管理n; cout 5.学生选课及成绩管理n;cout 6.数据管理n; cout 7.退出n; cout *n; cout 请选择17:k;if(k=6)break;switch(t)case 1:teachermanage (); /调用教师管理函数 break;case 2: studentmanage(); /调用学生管理函数break;case 3:coursemanage(); /调用课程管理函数break;case 4:teachingmanage(); /调用教师授课管理函数break;case 5:grademanage(); /调用学生选课及成绩管理函数break;case 6: datamanage(); /调用数据管理函数break; default: break;return 0;实现要求:1)每位同学至少要完成teachermanage ()、studentmanage()、coursemanage()、teachingmanage()和grademanage()五个功能模块函数中的一个的编写;2)在各功能模块中,自行设计子菜单,按不同要求完成对数据库中的数据操作:显示、查找、删除、修改等;3)与数据库的连接和断开单独用函数实现。知识准备1数据库应用系统的组成数据库应用系统是以数据库为核心的信息系统,在数据库应用系统中强调数据共享与数据集成,数据库应用系统共有四个层次组成,它们分别是平台层、数据层、应用层及界面层。2数据库应用系统的开发以数据库应用系统平台为基础,并使用DBMS、中间件、开发工具(包括应用开发工具与界面开发工具)可以对数据库应用系统作开发,其开发的内容包括下面几个部分:(1)数据层开发 包括数据模式建立、数据加载、数据完整性、完全性的设置等内容。(2)应用层开发 包括应用程序编制以及与数据库接口等开发。(3)界面层开发 包括应用界面程序的编制等内容。3C/S结构方式是网络上的一种基本分布式结构方式。在C/S结构模式中,它由一个服务器S(server)与多个客户机C(client)所组成,它们间由网络相联并通过接口进行交互,其简单示意图可见图6-6。服务器S客户机C客户机C客户机C图6-6 C/S结构示意图4数据库应用系统的开发工具(1)数据层开发 SQL Server 2005(2)应用层与界面层开发 VC 6.05ODBCODBC即开放式数据库互连(Open Database Connectivity)是基于关系数据库的结构化查询语言SQL而设计的,用于访问数据库的统一界面标准。它包含一组可扩展的动态链接库,提供了一个标准的数据库应用的程序设计接口,可以通过它编写对数据库进行增、删、改、查和维护等操作的应用程序。 在ODBC层上的应用程序看来,各个异构关系数据库只是相当于不同的数据源,这些数据源的组织结构对于开发人员是透明的,因此可以编写独立于数据库的访问程序,在应用程序中发出SQL命令,由ODBC发给数据库,数据库再将处理结果经过ODBC返回给应用程序。 6ODBC数据源DSN(1)数据源 数据的来源和访问该数据所需的连接信息。数据的来源:一般为DBMS、电子表格以及文本文件;连接信息:包括服务器位置、数据库名称、登录ID、密码等(2)ODBC数据源 记录下列内容:连接到数据源所使用的 ODBC 驱动程序。ODBC 驱动程序连接到数据源所使用的信息。连接所使用的驱动程序特有的选项。7使用ODBC编程步骤编写ODBC程序主要有一下几个步骤:(1)分配ODBC环境句柄:调用函数SQLAllocHandle,声明一个SQLHENV的变量。设置环境属性:完成环境分配后,用函数SQLSetEnvAttr设置环境属性,注册ODBC版本号。(2)分配连接句柄:调用SQLAllocHandle函数,声明一个SQLHDBC类型的变量。设置连接属性:所有连接属性都可通过函数SQLSetConnectAttr设置,调用函数SQLGetConnectAttr可获取这些连接属性的当前设置值。(3)连接数据源:对于不同的程序和用户接口,用不同的函数把连接句柄与数据库连接。SQLConnect:该函数只要提供数据源名称、用户ID和口令,就可以进行连接了。SQLDriverConnect:该函数用一个连接字符串建立至数据源的连接,它可以让用户输入必要的连接信息,使用系统中还没定义的数据源。(4)准备并执行SQL语句1)分配语句句柄:通过调用SQLAllocHandle函数分配。函数SQLGetStmrrAttr和SQLSetStmrrAttr用来获取和设置一个语句句柄的选项。2)执行SQL语句SQLExecDirect:该函数直接执行SQL语句,对于只执行一次的SQL语句来说,该函数是执行最快的方法。SQLPrepare和SQLExecute:对于需要多次执行的SQL语句来说,可先调用SQLPrepare准备SQL语句的执行,用SQLExecute执行准备好的语句。3)使用参数:使用参数可以使一条SQL语句多次执行,得到不同的结果。函数SQLBindParameter负责为参数定义变量,将一段SQL语句中的一个参数标识符(?)捆绑在一起,实现参数值的传递。(5)获取结果集应用程序通过绑定(Binding)(建立结果集与用户变量的联系,使结果集中的每一列与用户申请的变量一一对应)对结果集进行操作。1)绑定列:首先必须分配与结果集中字段相对应的变量,然后通过函数SQLBindCol将记录字段同程序变量绑定在一起,对于长记录字段,可以通过调用函数SQLGetData直接取回数据。绑定字段可以根据自己的需要全部绑定,也可以绑定其中的某几个字段。通过调用函数SQLBindCol将变量地址值赋为NULL,可以结束对一个记录字段的绑定,通过调用函数SQLFreeStmt,将其中选项设为SQL_UNBIND,或者直接释放句柄,都会结束所有记录字段的绑定。2)SQLFetch:该函数用于将结果集的下一行变成当前行,并把所有捆绑过的数据字段的数据拷贝到相应的缓冲区。3)游标:应用程序获取数据是通过游标(Cursor)来实现的,在ODBC中,主要有3种类型的光标:单向游标、可滚动游标和块游标。(6)记录的添加、删除和更新:数据源数据更新可通过3种方式:1)通过SQLExecDirect函数使用相应的SQL语句,适用于任何ODBC数据源;2)调用SQLSetPos函数实现结果集定义更新;3)调用SQLBulkOperations函数实现数据更新,调用前,须先调用SQLFetch或SQLFetchScroll设定当前行集的位置。后两种方式有的数据源不支持,可调用SQLGetInfo确定数据源。(7)错误处理:每个ODBC API函数都能产生一系列反映操作信息的诊断记录,可以用SQLGetDiagField函数获取诊断记录中特定的域,另外,可以使用SQLGetDiagRec获取诊断记录中一些常用的域。(8)事务处理:事务提交有两种方式:自动提交模式和手动提交模式。自动提交模式是默认的连接属性设置,对于所有的ODBC驱动程序都能适应这种模式下,所有语句都是作为一个独立的事务进行处理的。应用程序可通过调用函数SQLSetConnectAttr设定连接属性SQL_ATTR_AUTOCOMMIT, 手动提交模式把一组SQL语句放入一个事务中,程序必须调用函数SQLEenTran明确地终止一个事务。若使用多个激活的事务,就必须建立多个连接,每一个连接包含一个事务。(9)断开数据连接并释放环境句柄:完成数据库操作,关闭应用程序时,先调用SQLFreeHandle释放语句句柄,再调用SQLDisconnect函数关闭同数据库的连接,释放连接句柄。最后调用SQLFreeHandle释放前面分配的环境,释放环境句柄。8C+与ODBC数据源的连接(1)用ODBC API编程,一般要用到以下一些函数。函数 功能SQLALLocEnv 初始化ODBC环境,返回环境句柄SQLALLocConnect 为连接句柄分配内存并返回连接句柄SQLConnect 连接一个SQL数据资源SQLDriverConnect 连接一个SQL数据资源,允许驱动器向用户询问信息SQLALLocStmt 为语句句柄分配内存并返回语句句柄SQLExecDirect 把SQL语句送到服务器SQLFetchAdvances 到结果集的下一行(或第一行)SQLGetData 从结果集的特定的一列取回数据SQLFreeStmt 释放与语句句柄相关的资源SQLDisconnect 切断连接SQLFreeConnect 释放与连接句柄相关的资源SQLFreeEnv 释放与环境句柄相关的资源(2)C+中使用ODBC API的编程方法初始化ODBC,获取ODBC环境句柄SQLHENV henv=SQL_NULL_HENV; /定义环境句柄retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv); /分柄环境句柄henvretcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER); /设置环境属性,ODBC版本号3.x无论程序将建立多少个ODBC连接,这个过程只需执行一次即可。与ODBC数据源建立连接 调用SQLAllocConnect函数获取连接句柄SQLHDBC hdbc=SQL_NULL_HDBC; /定义数据库连接句柄retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); /分柄连接句柄hdbc 调用SQLConnect函数建立连接/* 系统数据源为ODBC_API_DEMO,登录用户名为sa,密码为空 */retcode = SQLConnect(hdbc, (SQLCHAR*)ODBC_API_DEMOL,SQL_NTS, (SQLCHAR*)sa,SQL_NTS, (SQLCHAR*),SQL_NTS);通过连接向ODBC数据库提交SQL语句,实现存取数据 调用SQLAllocStmt函数获取语句句柄。 SQLHSTMT hstmt=SQL_NULL_HSTMT; /定义语句句柄 retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); retcode = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER ); /设置属性 调用SQLExecDirec函数执行SQL 语 句retcode = SQLExecDirect(hstmt,(SQLCHAR*)SELECT * FROM STUDENT,SQL_NTS);结束应用程序在应用程序完成数据库操作,退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的步骤如下: 调用SQLFreeStmt 函数释放语句句柄及其相关的系统资源。SQLFreeHandle(SQL_HANDLE_STMT,hstmt); /释放语句句柄 调用SQLDisconnect 函数关闭连接。SQLDisconnect(hdbc); /断开数据源 调用SQLFreeConnect 函数释放连接句柄及其相关的系统资源。 SQLFreeHandle(SQL_HANDLE_DBC,hdbc); /释放连接句柄 调用SQLFreeEnv 函数释放环境句柄及其相关的系统资源,停止ODBC 操作。SQLFreeHandle(SQL_HANDLE_ENV,henv); /释放环境句柄使用ODBC编程实例:通过ODBC数据源ODBC_API_DEMO,向“教师授课管理数据库”的STUDENT表中插入一条新记录,并输出STUDENT表中所有的记录。(1)配置ODBC数据源(建立与本机的“教师授课管理数据库”连接的ODBC系统数据源ODBC_API_DEMO,用户名为“sa”,密码为空)1) 打开 “控制面板”中“管理工具”窗口,双击“数据源 (ODBC)”,启动 ODBC 数据源管理器,如图1所示。图1 ODBC 数据源管理器12) 选择“系统DSN”,单击“添加”按钮,打开“创建新数据源”对话框,如图2所示。图2 创建新数据源对话框3)从列表中选择“SQL Server”,单击“完成”按钮,弹出如图3所示的对话框。图3 设置数据源名及服务器在此对话框中设置数据源名称ODBC_API_DEMO、数据源的描述(可不填)和要连接的数据库所在服务器(local)。其中服务器还可用:IP地址、计算机名。4)点击“下一步”,弹出如图4所示的对话框。图4 选择用户登录方式选择“使用用户输入登录ID和密码的SQL Server验证”,输入用户名sa,密码为空。5)单击“下一步”按钮,弹出如图5所示的对话框。图5 选择数据库更改默认的数据库为要连接的数据库:教师授课管理数据库。6)单击“下一步”按钮,弹出如图6所示的对话框。图6 配置数据源选项选择好配置后,单击“完成”按钮,弹出如图7所示的对话框,显示新创建的ODBC数据源的配置信息。图7 ODBC数据源信息7)单击“测试数据源”按钮,如果数据源正确创建,“测试结果”对话框中将显示测试成功的信息,如图8所示;否则显示连接失败的信息。图8 ODBC数据源测试8)单击“确定”按钮,返回到如图7所示的对话框,再单击“确定”按钮,返回到“ODBC 数据源管理器”,此时,在系统数据源中就可见到刚建立的数据源ODBC_API_DEMO,如图9所示。图9 ODBC 数据源管理器2(2)源程序:/头文件#include #include #include #include #include #include #include #define SNO_LEN 30 /学号长度#define NAME_LEN 50 /姓名长度#define DEPART_LEN 100 /系名长度/* Step 1 定义句柄和变量 */ SQLHENV henv=SQL_NULL_HENV; /定义环境句柄 SQLHDBC hdbc=SQL_NULL_HDBC; /定义数据库连接句柄 SQLHSTMT hstmt=SQL_NULL_HSTMT; /定义语句句柄 int main() /*声明及定义变量 */SQLRETURN retcode; /定义返回代码变量SQLCHAR sNameNAME_LEN+1, sDepartDEPART_LEN+1,sSex3,sSnoSNO_LEN+1; SQLINTEGER sAge; SQLINTEGER cbAge = 0, cbSno = SQL_NTS, cbSex = SQL_NTS,cbName = SQL_NTS,cbDepart = SQL_NTS; /* Step 2 初始化环境 */ retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv); /分柄环境句柄henvretcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER); /设置环境属性,ODBC版本号3.x/* Step 3 建立连接 */ retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); /分柄连接句柄hdbc /* 系统数据源为ODBC_API_DEMO,登录用户名为sa,密码为空 */retcode = SQLConnect(hdbc, (SQLCHAR*)ODBC_API_DEMO,SQL_NTS, (SQLCHAR*)sa,SQL_NTS, (SQLCHAR*),SQL_NTS); if (!SQL_SUCCEEDED(retcode) /连接失败时返回错误值 cout连接数据源失败,系统自行退出!n; return -1; /* Step 4 初始化语句句柄 */ retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); retcode = SQLSetStmtAttr(hstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER ); /设置语句句柄属性/* Step 5 两种方式执行语句 */ /* 方式1 预编译带有参数的语句,向STUDENT表中插入一条新记录 */ retcode = SQLPrepare(hstmt,(SQLCHAR*)INSERT INTO STUDENT (SNO,SNAME,SSEX,SAGE,SDEPT) VALUES( , , , , ), SQL_NTS); /检测插入是否成功if (retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) /将变量cbAge,cbSno,cbSex,cbName,cbDepart中的内容写入该记录中 retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, SNO_LEN, 0, sSno, 0, &cbSno); retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, NAME_LEN, 0, sName, 0, &cbName); retcode = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 2, 0, sSex, 0, &cbSex); retcode = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,SQL_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025胎膜早破的护理
- 首钢工学院《医学分子细胞遗传基础》2023-2024学年第一学期期末试卷
- 武汉外语外事职业学院《牙体形态学》2023-2024学年第一学期期末试卷
- 贵州电子商务职业技术学院《图论及其应用》2023-2024学年第一学期期末试卷
- 山西同文职业技术学院《医学免疫学及检验》2023-2024学年第一学期期末试卷
- 质量系统培训
- 河南牧业经济学院《高等土力学》2023-2024学年第一学期期末试卷
- 青岛科技大学《医用生物材料A》2023-2024学年第一学期期末试卷
- 卫生监督案件交流课件
- 培训开场主持人
- 纤支镜护理试题及答案
- 水电工培训试题及答案
- 乌鲁木齐市既有建筑改造消防设计审查工作指南
- 2025至2030中国混凝土外加剂市场供需发展及经营管理风险预警报告
- 青海中考地理试题及答案
- 《中心静脉导管的护理》课件
- 城市轨道交通应急处理自然灾害应急处理课件
- 新疆维吾尔自治区2024年普通高校招生普通类国家及地方专项、南疆单列、对口援疆计划 本科二批次投档情况 (理工)
- 河南洛阳文旅集团财务岗位招聘考试真题2024
- 深入研究福建事业单位考试中的经典案例试题及答案
- 基础会计教学质量分析报告
评论
0/150
提交评论