北邮大三下数据库实验报告4.docx
《北邮大三下数据库实验报告4.docx》由会员分享,可在线阅读,更多相关《北邮大三下数据库实验报告4.docx(15页珍藏版)》请在冰豆网上搜索。
北邮大三下数据库实验报告4
北京邮电大学
实验报告
课程名称数据库系统原理
实验内容实验4
数据库接口实验
班级2013211***姓名***
指导老师成绩_________
2016年05月12日
实验4数据库接口实验
实验目的:
1.通过实验了解通用数据库应用编程接口ODBC的基本原理和实现机制,熟悉主要的ODBC接口的语法和使用方法;
2.利用C语言(或其它支持ODBC接口的高级程序设计语言)编程实现简单的数据库应用程序,掌握基于ODBC的数据库访问的基本原理和方法。
3.尝试使用SQLServer上的工具以特定格式导出数据,初步了解现代程序设计辅助工具的使用,加深对接口和数据库与外界的联系的认识。
实验内容:
本实验内容主要是如何通过数据库接口访问(包括增、删、改)数据库中的数据。
要求能够通过编写程序或者使用SQLServer工具访问到数据。
该实验的重点在于ODBC数据源配置和工具使用,而不在于编写有一定复杂度的程序。
实验步骤
1.在Windows控制面板中通过管理工具下的ODBC数据源工具在客户端新建连接到SQLServer服务器的ODBC数据源,测试通过后保存,注意名字要和应用程序中引用的数据源一样。
A)打开odbc数据源管理器,点击“添加”。
B)选择SQLServer,“完成”。
C)为你的数据源命名,要记住这个名字,在编写程序中要进行链接。
然后“下一步”。
D)如图所选,点击下一步
E)选择自己已经建立好的数据库。
点击“下一步”。
F)到这个界面,直接点击“下一步”。
G)点击“测试数据源”进行测试,看时候能够连接成功。
H)如图所示,连接成功。
2.编译程序并调试通过。
源代码见附录。
实验运行效果图:
A)
B)进行“删除”操作
删掉了第二条记录。
C)进行“insert”操作
第2条记录又添加回来了。
D)进行“update”操作
将book_id为dep04_b001_aa的元组的book_id改为dep04_b001_02。
实验总结:
配置接口时花了一些功夫,测试数据源的时候总是连接不上,后来在“连接哪个SQL”这个选项选了local才成功。
代码的编写理论上不困难,但是实际操作起来刚开始还是摸不着头脑,借鉴了别人的才知道连接句柄、环境句柄等的作用。
代码运行过后,数据库中相应数据被程序改写,因为数据库没有设置主键,所以“插入”操作可以插入几个重复的元组。
源代码:
#include
#include
#include
#include
#include
HENVhenv;
HDBChdbc;
HSTMThsmt;
SQLRETURNsret;
charszMscID[15];
longcbMscID;
charszMscName[15];
longcbMscName;
charszMscCompany[15];
longcbMscCompany;
charszMscLongitude[15];
longcbMscLongitude;
charszMscLatitude[15];
longcbMscLatitude;
SQLREALszMscAltitude;
longcbMscAltitude;
voidprintDB();
voiddeleteDB();
voidupdateDB();
voidinsertDB();
voidrenewHSMT();
intmain()
{
sret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
if(sret!
=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");
else
{
sret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if(sret!
=SQL_SUCCESS&&sret!
=SQL_SUCCESS_WITH_INFO)
printf("wrong!
3");
else
{
sret=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");
else
{
printDB();
intselectNum=0;
charab;
printf("Pleaseselectafunction:
1.delete2.update3.insert-1.esc\n");
scanf("%d",&selectNum);
while(selectNum!
=-1)
{
if(selectNum!
=1&&selectNum!
=2&&selectNum!
=3)
{
printf("inputthewrongnumber!
Pleasetryagain.");
scanf("%d",&selectNum);
}
else
{
if(selectNum==1)
{
renewHSMT();
deleteDB();
renewHSMT();
printDB();
}
elseif(selectNum==2)
{
renewHSMT();
updateDB();
renewHSMT();
printDB();
}
else
{
renewHSMT();
insertDB();
renewHSMT();
printDB();
}
}
printf("Pleaseselectafunction:
1.delete2.update3.insert-1.esc\n");
scanf("%d",&selectNum);
}
SQLFreeHandle(SQL_HANDLE_STMT,hsmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
}
}
}
system("pause");
}
voidprintDB()
{
sret=SQLExecDirect(hsmt,(SQLCHAR*)"SELECTbook_id,book_name,publish_company,author,priceFROMbook$",SQL_NTS);
if(sret==SQL_SUCCESS||sret==SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hsmt,1,SQL_C_CHAR,&szMscID,sizeof(szMscID),&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,5,SQL_C_CHAR,&szMscLatitude,sizeof(szMscLatitude),&cbMscLatitude);
//SQLBindCol(hsmt,6,SQL_C_FLOAT,&szMscAltitude,sizeof(szMscAltitude),&cbMscAltitude);
printf("%-15s%-15s%-15s%-15s%-15s\n","book_id","book_name","publish_company","author","price");
while(SQLFetchScroll(hsmt,SQL_FETCH_NEXT,0)!
=SQL_NO_DATA_FOUND)
{
printf("%-15s%-15s%-15s%-15s%-15s\n",szMscID,szMscName,szMscCompany,szMscLongitude,szMscLatitude);
}
}
else
{
printf("wrong!
6\n");
}
}
voiddeleteDB()
{
sret=SQLExecDirect(hsmt,(SQLCHAR*)"DELETEFROMbook$WHEREbook_id='dep04_b001_01'",SQL_NTS);
if(sret==SQL_SUCCESS||sret==SQL_SUCCESS_WITH_INFO)
{
printf("deletesuccessful!
\n");
}
else
{
printf("wrong!
7\n");
}
}
voidupdateDB()
{
sret=SQLExecDirect(hsmt,(SQLCHAR*)"updatebook$setbook_id='dep04_b001_aa'WHEREbook_id='dep04_b001_02'",SQL_NTS);
if(sret==SQL_SUCCESS||sret==SQL_SUCCESS_WITH_INFO)
{
printf("updatesuccessful!
\n");
}
else
{
printf("wrong!
8\n");
}
}
voidinsertDB()
{
sret=SQLExecDirect(hsmt,(SQLCHAR*)"INSERTINTObook$VALUES('dep04_b001_01','计算机基础','清华大学出版社','洪涛',16)",SQL_NTS);
if(sret==SQL_SUCCESS||sret==SQL_SUCCESS_WITH_INFO)
{
printf("insertsuccessful!
\n");
}
else
{
printf("wrong!
9\n");
}
}
voidrenewHSMT()
{
SQLFreeHandle(SQL_HANDLE_STMT,hsmt);
sret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);
}