数据库接口实验.doc_第1页
数据库接口实验.doc_第2页
数据库接口实验.doc_第3页
数据库接口实验.doc_第4页
数据库接口实验.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学实验报告课程名称 数据库系统原理实验内容 实验四数据库接口实验班级 2012211314 姓名 韩植/吴梦指导老师 卢向群 成绩_2015年 4月 26日实验目的1通过实验了解通用数据库应用编程接口ODBC的基本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;2利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的基本原理和方法。3尝试使用SQL Server上的工具以特定格式导出数据,初步了解现代程序设计辅助工具的使用,加深对接口和数据库与外界的联系的认识。实验内容本实验内容主要是如何通过数据库接口访问(包括增、删、改)数据库中的数据。要求能够通过编写程序或者使用SQL Server工具访问到数据。该实验的重点在于ODBC数据源配置和工具使用,而不在于编写有一定复杂度的程序。实验环境 C/S结构,SQL Server企业版服务器及客户端。数据库存储在服务器上,表和视图定义也存储在服务器上,但同学通过网络使用客户端连接到服务器上进行操作。实验步骤1. 实验准备:(a) 以教科书第四章关于SQL语言相关内容为基础,课后查阅、自学ODBC接口有关内容,包括ODBC的体系结构、工作原理、数据访问过程、主要API接口的语法和使用方法等。(b) 以实验二建立的数据库为基础,编写 C语言(或其它支持ODBC接口的高级程序设计语言) 数据库应用程序,按照如下步骤访问数据库i. Step1. ODBC初始化,为ODBC分配环境句柄ii. Step2. 建立应用程序与ODBC数据源的连接iii. Step3. 利用SQLExecDirect语句,实现数据库应用程序对数据库中表(有数据)进行数据查询、修改、删除、插入等操作。要求先打印出所有记录,然后删除一行,再打印一次,进行修改,再打印一次,最后插入,再打印一次。iv. Step4. 结束数据库应用程序 因为这不是程序设计练习,所以只针对一张表就可以了。我们也不要求做出很好的界面,和允许用户选择如何操作数据,只要是完成基本功能就可以了。2. 在Windows控制面板中通过管理工具下的ODBC数据源工具在客户端新建连接到SQL Server服务器的ODBC数据源,测试通过后保存,注意名字要和应用程序中引用的数据源一样。3. 编译程序并调试通过。4. 利用数据库管理工具中的Web 向导,创建一个查询MS表的信息网页。实验要求1要求所编写的数据库访问应用程序中使用到以下主要的ODBC API函数:(1) SQLALLocEnv:初始化ODBC环境,返回环境句柄(2) SQLALLocConnect:为连接句柄分配内存并返回连接句柄(3) SQLConnect:连接一个SQL数据资源(4) SQLDriverConnect连接一个SQL数据资源,允许驱动器向用户询问信息(5) SQLALLocStmt 为语句句柄分配内存, 并返回语句句柄(6) SQLExecDirect 把SQL语句送到数据库服务器,请求执行由SQL语句定义的数据库访问(7) SQLFetchAdvances将游标移动到到查询结果集的下一行(或第一行)(8) SQLGetData 按照游标指向的位置,从查询结果集的特定的一列取回数据(9) SQLFreeStmt 释放与语句句柄相关的资源(10) SQLDisconnect 切断连接(11) SQLFreeConnect 释放与连接句柄相关的资源(12) SQLFreeEnv 释放与环境句柄相关的资源实验结果与分析1、数据源的设置数据源测试成功2、 用编译器进行程序编写PC为win8.1系统,因兼容问题使用VS2012编译器代码如下:#include #include #include #include sql.h #include sqltypes.h #include sqlext.h RETCODE retcode;/结果返回集 SQLHDBC hdbc;/定义链接句柄 void print();/打印子程序 void SQL(unsigned char);/执行 SQL 语句子程序 int main() SQLHANDLE henv; /定义环境句柄 unsigned char SY=hz;/ODBC 数据源名称 /unsigned char db2=sa;/用户名 /unsigned char pass=HZ1994 ;/密码 /分配 ODBC 环境retcode=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if(retcode=SQL_SUCCESS|retcode=SQL_SUCCESS_WITH_INFO) /声明环境 retcode=SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3, 0); if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); /分配连接句柄 if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) retcode=SQLConnect(hdbc,SY,SQL_NTS,NULL,0,NULL,0);/链接 if(retcode = SQL_SUCCESS | retcode = SQL_SUCCESS_WITH_INFO) print(); unsigned char insert=insert into dbo.course values(dep00_a001,体育,dep00_a001_01,4,5,7);SQL(insert);print(); unsigned char update=update dbo.course set credit=10 where course_name=体育; SQL(update); print(); unsigned char del=delete from dbo.course where course_name=体育; SQL(del); print(); SQLFreeConnect(hdbc); /释放链接句柄 SQLFreeEnv(henv); / 释放 ODBC 环境句柄 system(pause); return 0; void print() unsigned char yuju=select * from dbo.course;SQLHSTMT hstmt;/定义语句句柄char L120;char L220;char L320;char L420;char L520; char L620;long lenOut1,lenOut2,lenOut3,lenOut4,lenOut5,lenOut6;retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); /分配语句句柄if(retcode=SQL_SUCCESS) retcode=SQLExecDirect(hstmt,yuju,SQL_NTS); if(retcode = SQL_SUCCESS|retcode = SQL_SUCCESS_WITH_INFO) /将结果集中的属性列一一绑定至变量 retcode=SQLBindCol(hstmt,1,SQL_C_CHAR,L1,sizeof(L1),&lenOut1); retcode=SQLBindCol(hstmt,2,SQL_C_CHAR,L2,sizeof(L2),&lenOut2); retcode=SQLBindCol(hstmt,3,SQL_C_CHAR,L3,sizeof(L3),&lenOut3); retcode=SQLBindCol(hstmt,4,SQL_C_CHAR,L4,sizeof(L4),&lenOut4); retcode=SQLBindCol(hstmt,5,SQL_C_CHAR,L5,sizeof(L5),&lenOut5);/把所有捆绑过的数据字段的数据拷贝到相应的缓冲区 retcode=SQLBindCol(hstmt,6,SQL_C_CHAR,L6,sizeof(L6),&lenOut6);retcode=SQLFetch(hstmt); while(retcode = SQL_SUCCESS|retcode = SQL_SUCCESS_WITH_INFO) printf(%st%st%st%st%st%sn,L1,L2,L3,L4,L5,L6);retcode=SQLFetch(hstmt); SQLFreeStmt(hstmt,SQL_DROP); void SQL(unsigned char aaa) printf(n%sn,aaa);SQLHSTMT hstmt;/定义语句句柄 retcode=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); /分配语义句柄 if(retcode=SQL_SUCCESS) retcode=SQLExecDirect(hstmt,aaa,SQL_NTS); SQLFreeStmt(hstmt,SQL_DROP); /释放语句句柄 3、 编译运行运行结果因为之前数据库中,导入表数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论