北邮大三下数据库实验报告4_第1页
北邮大三下数据库实验报告4_第2页
北邮大三下数据库实验报告4_第3页
北邮大三下数据库实验报告4_第4页
北邮大三下数据库实验报告4_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论