数据库实验报告6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一. 实验内容、步骤以及结果
1.ODBC配置以及程序调试:(50分)
(1)配置一个ODBC数据源,要求数据源名称:student,其中包含s(学生信息)表。
1.用系统工具配置ODBC,点击“添加”:
2.出现以下对话框,选中SQL Sever,点击完成
3.在出现的对话框中设置属性,如图,点击下一步,点击下一步后出现如下,更改默认数据库,点击下一步。
4.在出现的对话框中点击测试连接后出现测试成功的对话框,点击确定退出ODEC数据源管理器。
(2)阅读并运行实验给出的例子程序,理解ODBC编程,要求简单写出自己对这段程序的理解或者流程图,并且请给出程序运行结果示例图。
定义句柄,变量
初始化环境
建立连接
初始化语句句柄
执行语句
结果集中处理
输出,释放句柄
结果如下
实例运行结果如下:
2.参考给出的ODBC编程示例,使用ODBC技术,编写一个简单的程序,包含对数据库
SPJ的连接,查询,插入,修改和删除。(50分)插入:
查询:
修改:
删除:
代码:
#include"stdafx.h" #include
#include
#include
#include
using namespace std;
int main()
{
SQLHENV henv; //环境句柄
SQLHDBC hdbc; //连接句柄
SQLHSTMT hstmt; //语句句柄
char sql_order[100];
SQLRETURN ret;
SQLCHAR sno[50], sname[50], ssex[50], sbirth[50], sdept[50];
SQLINTEGER cbsno = SQL_NTS, cbsname = SQL_NTS, cbssex = SQL_NTS, cbsbirth = SQL_NTS, cbsdept = SQL_NTS;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
ret = SQLConnect(hdbc, (SQLCHAR*)"student", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"123", SQL_NTS);
if (!SQL_SUCCEEDED(ret))
return -1;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
int demo;
while (1)
{
cout << "1.insert " << "2.select " << "3.delete " << "4.update " << "0.exit"< cin >> demo; if (demo == 0) { break; } else if (demo == 3) { cout << "输入删除语句" << endl; getchar(); gets_s(sql_order); ret = SQLExecDirect(hstmt, (SQLCHAR*)sql_order, SQL_NTS); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { cout << "删除成功" << endl; } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); else if (demo == 4) { cout << "输入更新语句" << endl; getchar(); gets_s(sql_order); ret = SQLExecDirect(hstmt, (SQLCHAR*)sql_order, SQL_NTS); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { cout << "删除成功" << endl; } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } else if (demo == 2) { printf("输入SQL查询语句\n"); getchar(); gets_s(sql_order); ret = SQLExecDirect(hstmt, (SQLCHAR*)sql_order, SQL_NTS); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { ret = SQLBindCol(hstmt, 1, SQL_C_CHAR, sno, 50, 0); ret = SQLBindCol(hstmt, 2, SQL_C_CHAR, sname, 50, 0); ret = SQLBindCol(hstmt, 3, SQL_C_CHAR, ssex, 50, 0); ret = SQLBindCol(hstmt, 4, SQL_C_CHAR, sbirth, 50, 0); ret = SQLBindCol(hstmt, 5, SQL_C_CHAR, sdept, 50, 0); } while (ret = SQLFetch(hstmt) != SQL_NO_DATA_FOUND) { printf("%s%s%s%s%s\n", sno, sname, ssex, sbirth, sdept); } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } else { printf("依次输入插入的学号,姓名,性别,生日,学院\n"); scanf("%s%s%s%s%s", sno, sname, ssex, sbirth, sdept); ret = SQLPrepare(hstmt, (SQLCHAR*)"insert into S values(?,?,?,?,?)",