《北邮大三下数据库实验报告4.doc》由会员分享,可在线阅读,更多相关《北邮大三下数据库实验报告4.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京邮电大学实验报告课程名称 数据库系统原理实验内容 实验4数据库接口实验班级 2013211* 姓名 *指导老师 成绩_2016年 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)选择自己已经建立好的数据库。点击“下一步”
3、。F)到这个界面,直接点击“下一步”。G)点击“测试数据源”进行测试,看时候能够连接成功。H)如图所示,连接成功。2. 编译程序并调试通过。源代码见附录。实验运行效果图:A)B)进行“删除”操作删掉了第二条记录。C)进行“insert”操作第二条 记录又添加回来了。D)进行“update”操作将book_id为dep04_b001_aa的元组的book_id改为dep04_b001_02。实验总结:配置接口时花了一些功夫,测试数据源的时候总是连接不上,后来在“连接哪个SQL”这个选项选了local才成功。代码的编写理论上不困难,但是实际操作起来刚开始还是摸不着头脑,借鉴了别人的才知道连接句柄、
4、环境句柄等的作用。代码运行过后,数据库中相应数据被程序改写,因为数据库没有设置主键,所以“插入”操作可以插入几个重复的元组。源代码:#include #include #include #include #include HENV henv;HDBC hdbc;HSTMT hsmt;SQLRETURN sret;char szMscID15;long cbMscID;char szMscName15;long cbMscName;char szMscCompany15;long cbMscCompany;char szMscLongitude15;long cbMscLongitude;cha
5、r 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 != SQL_SUCCESS & sret != SQL_SUCCESS_WITH_INFO) printf(wron
6、g!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(SQL_HANDLE_DBC,henv,&hdbc);if (sret != SQL_SUCCESS & sret != SQL_SUCCESS_WITH_INFO)printf(wrong!3);el
7、sesret = SQLConnect(hdbc,(SQLCHAR*)sqlserver,SQL_NTS,NULL,0,NULL,0);if (sret != SQL_SUCCESS & sret != SQL_SUCCESS_WITH_INFO)printf(wrong!4);sret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);if (sret != SQL_SUCCESS & sret != SQL_SUCCESS_WITH_INFO)printf(wrong!5);elseprintDB();int selectNum = 0;char a
8、b; printf(Please select a function:1.delete 2.update 3.insert -1.escn);scanf(%d,&selectNum);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(
9、);else if(selectNum = 2)renewHSMT();updateDB();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);
10、SQLFreeHandle(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(szMscID), &cbMscID)
11、;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, 5, SQL_C_CHAR, &szMscLatitude, size
12、of(szMscLatitude), &cbMscLatitude);/SQLBindCol(hsmt, 6, SQL_C_FLOAT, &szMscAltitude, sizeof(szMscAltitude), &cbMscAltitude);printf(%-15s %-15s %-15s %-15s %-15sn,book_id,book_name,publish_company,author,price);while(SQLFetchScroll(hsmt,SQL_FETCH_NEXT,0) != SQL_NO_DATA_FOUND) printf(%-15s %-15s %-15s
13、 %-15s %-15sn, szMscID, szMscName, szMscCompany, szMscLongitude, szMscLatitude); else printf(wrong!6n); void deleteDB() sret = SQLExecDirect(hsmt,(SQLCHAR*)DELETE FROM book$ WHERE book_id = dep04_b001_01,SQL_NTS); if(sret = SQL_SUCCESS | sret = SQL_SUCCESS_WITH_INFO) printf(delete successful!n); els
14、e printf(wrong!7n); void updateDB() sret = SQLExecDirect(hsmt,(SQLCHAR*)update book$ set book_id = 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),SQL_NTS); if(sret = SQL_SUCCESS | sret = SQL_SUCCESS_WITH_INFO) printf(insert successful!n); else printf(wrong!9n); void renewHSMT() SQLFreeHandle(SQL_HANDLE_STMT, hsmt); sret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt);