版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、北京邮电大学实验报告课程名称 数据库系统原理实验内容 实验4数据库接口实验班级 2021211* 姓名 *指导老师 成绩_2021年 05月 12日实验4 数据库接口实验实验目的:1通过实验了解通用数据库应用编程接口ODBC的根本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;2利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的根本原理和方法。3尝试使用SQL Server上的工具以特定格式导出数据,初步了解现代程序设计辅助工具的使用,加深对接口和数据库与外界的联系的认识。实验内容:本实验内容主要是如何通过数据库接口访问包
2、括增、删、改数据库中的数据。要求能够通过编写程序或者使用SQL Server工具访问到数据。该实验的重点在于ODBC数据源配置和工具使用,而不在于编写有一定复杂度的程序。实验步骤1. 在Windows控制面板中通过管理工具下的ODBC数据源工具在客户端新建连接到SQL Server效劳器的ODBC数据源,测试通过后保存,注意名字要和应用程序中引用的数据源一样。 A翻开odbc数据源管理器,点击“添加。B选择SQL Server,“完成。C为你的数据源命名,要记住这个名字,在编写程序中要进行链接。然后“下一步。D如图所选,点击下一步E选择自己已经建立好的数据库。点击“下一步。F到这个界面,直接点
3、击“下一步。G点击“测试数据源进行测试,看时候能够连接成功。H如下图,连接成功。2. 编译程序并调试通过。源代码见附录。实验运行效果图:AB进行“删除操作删掉了第二条记录。C进行“insert操作第2条 记录又添加回来了。D进行“update操作将book_id为dep04_b001_aa的元组的book_id改为dep04_b001_02。实验总结:配置接口时花了一些功夫,测试数据源的时候总是连接不上,后来在“连接哪个SQL这个选项选了local才成功。代码的编写理论上不困难,但是实际操作起来刚开始还是摸不着头脑,借鉴了别人的才知道连接句柄、环境句柄等的作用。代码运行过后,数据库中相应数据被
4、程序改写,因为数据库没有设置主键,所以“插入操作可以插入几个重复的元组。源代码:#include <windows.h>#include <stdio.h>#include <sql.h> #include <sqlext.h> #include <sqltypes.h> HENV henv;HDBC hdbc;HSTMT hsmt;SQLRETURN sret;char szMscID15;long cbMscID;char szMscName15;long cbMscName;char szMscCompany15;long cb
5、MscCompany;char szMscLongitude15;long cbMscLongitude;char szMscLatitude15;long cbMscLatitude;SQLREAL szMscAltitude;long cbMscAltitude;void printDB();void deleteDB();void updateDB();void insertDB();void renewHSMT();int main() sret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (sret
6、 != SQL_SUCCESS && sret != SQL_SUCCESS_WITH_INFO) printf("wrong!1"); else sret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);if (sret != SQL_SUCCESS && sret != SQL_SUCCESS_WITH_INFO) printf("wrong!2");elsesret = SQLAllocHandle
7、(SQL_HANDLE_DBC,henv,&hdbc);if (sret != SQL_SUCCESS && sret != SQL_SUCCESS_WITH_INFO)printf("wrong!3");elsesret = SQLConnect(hdbc,(SQLCHAR*)"sqlserver",SQL_NTS,NULL,0,NULL,0);if (sret != SQL_SUCCESS && sret != SQL_SUCCESS_WITH_INFO)printf("wrong!4");
8、sret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);if (sret != SQL_SUCCESS && sret != SQL_SUCCESS_WITH_INFO)printf("wrong!5");elseprintDB();int selectNum = 0;char ab; printf("Please select a function:1.delete 2.update 3.insert -1.escn");scanf("%d",&select
9、Num);while(selectNum != -1)if(selectNum != 1 && selectNum != 2 && selectNum != 3)printf("input the wrong number!Please try again.");scanf("%d",&selectNum);elseif(selectNum = 1)renewHSMT();deleteDB();renewHSMT();printDB();else if(selectNum = 2)renewHSMT();updat
10、eDB();renewHSMT();printDB();elserenewHSMT();insertDB();renewHSMT();printDB();printf("Please select a function:1.delete 2.update 3.insert -1.escn");scanf("%d",&selectNum);SQLFreeHandle(SQL_HANDLE_STMT, hsmt);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC, hdbc);SQLFreeHandle
11、(SQL_HANDLE_ENV, henv); system("pause"); void printDB() sret = SQLExecDirect(hsmt,(SQLCHAR*)"SELECT book_id,book_name,publish_company,author,price FROM book$",SQL_NTS); if(sret = SQL_SUCCESS | sret = SQL_SUCCESS_WITH_INFO) SQLBindCol(hsmt, 1, SQL_C_CHAR, &szMscID, sizeof(szMs
12、cID), &cbMscID);SQLBindCol(hsmt, 2, SQL_C_CHAR, szMscName, sizeof(szMscName), &cbMscName);SQLBindCol(hsmt, 3, SQL_C_CHAR, szMscCompany, sizeof(szMscCompany), &cbMscCompany);SQLBindCol(hsmt, 4, SQL_C_CHAR, &szMscLongitude, sizeof(szMscLongitude), &cbMscLongitude);SQLBindCol(hsmt,
13、5, SQL_C_CHAR, &szMscLatitude, sizeof(szMscLatitude), &cbMscLatitude);/SQLBindCol(hsmt, 6, SQL_C_FLOAT, &szMscAltitude, sizeof(szMscAltitude), &cbMscAltitude);printf("%-15s %-15s %-15s %-15s %-15sn","book_id","book_name","publish_company","
14、;author","price");while(SQLFetchScroll(hsmt,SQL_FETCH_NEXT,0) != SQL_NO_DATA_FOUND) printf("%-15s %-15s %-15s %-15s %-15sn", szMscID, szMscName, szMscCompany, szMscLongitude, szMscLatitude); else printf("wrong!6n"); void deleteDB() sret = SQLExecDirect(hsmt,(SQLCHA
15、R*)"DELETE FROM book$ WHERE book_id = 'dep04_b001_01'",SQL_NTS); if(sret = SQL_SUCCESS | sret = SQL_SUCCESS_WITH_INFO) printf("delete successful!n"); else printf("wrong!7n"); void updateDB() sret = SQLExecDirect(hsmt,(SQLCHAR*)"update book$ set book_id =
16、39;dep04_b001_aa' WHERE book_id = 'dep04_b001_02'",SQL_NTS); if(sret = SQL_SUCCESS | sret = SQL_SUCCESS_WITH_INFO) printf("update successful!n"); else printf("wrong!8n"); void insertDB() sret = SQLExecDirect(hsmt,(SQLCHAR*)"INSERT INTO book$ VALUES('dep04_b001_01','计算机根底','清华大学出版社','洪涛',16)&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术室护理中的PDCA循环与效果评价
- 2026春季学期国家开放大学专科《建筑施工技术》一平台在线形考形考任务1至4试题及答案
- 护理交接班常见问题及对策
- 撤销刑事解协议书
- 困难党员结对协议书
- 极数:2025年全球电商行业AI应用研究报告
- 游戏应用商店优化合同
- 危险品考试题图片及答案
- 2026年卒中后肢体痉挛诊疗试题及答案(神经内科版)
- 2026年小区智能门禁系统安装合同协议
- 急性心肌梗死合并消化道出血
- 2025-2026学年高一上学期做个文明人:青春修养主题班会
- 专题06 拓展:对勾函数、飘带函数、V型函数、高斯函数的四大题型(高效培优专项训练)数学北师大版2019必修第一册(解析版)
- 西红柿的营养奥秘(大班教学)
- 红楼梦木石前盟课件
- GB/T 31150-2025汽车零部件物流塑料周转箱尺寸系列及技术要求
- 中考英语作文写作万能句型汇编
- 清理河道劳务合同范本
- 树木疏伐施工方案
- 雨课堂在线学堂《大数据可视化》单元考核测试答案
- 安装灭火器施工方案模板
评论
0/150
提交评论