轻松学习C语言中的Access数据库应用 (c 使用access数据库)
随着计算机技术的发展,数据库已经成为了信息管理的重要工具之一。数据库是指存储大量数据的系统,它提供了对数据的快速访问和管理。Access数据库是Microsoft Office套件中的一个应用程序,它提供了一种易于使用的界面,可以方便地创建和管理数据库。本文将介绍如何在C语言中使用Access数据库。
一、准备工作
在开始使用Access数据库之前,我们需要安装ODBC(Open Database Connectivity)驱动程序。ODBC定义了在应用程序与各种数据库之间交换数据的标准接口,可以让C语言程序连接到Access数据库。在Windows系统中,ODBC驱动程序是自带的,不需要额外下载。使用之前需要在ODBC数据源管理器中添加一个系统DSN(Data Source Name),这样才能在C语言程序中连接到Access数据库。可以按照以下步骤进行设置:
1. 打开控制面板,在搜索框中输入“ODBC数据源管理器”,点击“ODBC数据源管理器”图标。
2. 在“ODBC数据源管理员”中选择“系统DSN”选项卡,然后点击“添加”按钮。
3. 在弹出的“添加数据源”对话框中,选择“Microsoft Access驱动程序(*.mdb)”或“Microsoft Access驱动程序(*.accdb)”(根据你的Access版本选择),然后点击“完成”。
4. 在弹出的“ODBC Microsoft Access 驱动程序设置”对话框中,输入数据源名称(如“TestDB”),选择Access数据库文件(.mdb或.accdb文件),然后点击“确定”。
至此,DSN已经添加成功,我们可以在C语言程序中使用ODBC来连接到Access数据库了。
二、连接Access数据库
在C语言中连接到Access数据库需要使用ODBC API函数。ODBC API是一个标准的Windows API,用于访问各种不同类型的数据库。连接到Access数据库的C语言代码如下:
“`c
#include
#include
#include
#include
int mn(void)
{
SQLHENV henv; //环境句柄
SQLHDBC hdbc; //连接句柄
SQLRETURN retcode; //返回值
//分配环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
//设置环境属性
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
//分配连接句柄
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
retcode = SQLConnect(hdbc, (SQLCHAR*)”TestDB”, SQL_NTS, (SQLCHAR*)NULL, 0, NULL, 0);
//连接成功
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//TODO: 执行SQL语句
}
//连接失败
else
{
//TODO: 处理连接失败的情况
}
//释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
//释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
“`
在上面的代码中,我们首先分别分配了一个环境句柄和一个连接句柄。然后设置环境属性,告诉ODBC驱动程序使用ODBC版本 3 和Unicode字符集。接着调用SQLConnect函数连接到指定的Access数据库(TestDB),如果连接成功,就可以在这个连接上执行SQL语句了。
三、执行SQL语句
连接到Access数据库之后,我们可以使用ODBC API函数执行SQL语句。下面是一个例子,展示了如何执行一个SELECT语句,并将结果输出到控制台:
“`c
#include
int mn(void)
{
SQLHENV henv; //环境句柄
SQLHDBC hdbc; //连接句柄
SQLHSTMT hstmt; //语句句柄
SQLRETURN retcode; //返回值
//分配环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
//设置环境属性
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
//分配连接句柄
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
retcode = SQLConnect(hdbc, (SQLCHAR*)”TestDB”, SQL_NTS, (SQLCHAR*)NULL, 0, NULL, 0);
//连接成功
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
char sql[256] = “SELECT * FROM Students”;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //分配语句句柄
retcode = SQLExecDirect(hstmt, (SQLCHAR*)sql, SQL_NTS); //执行SQL语句
//查询成功
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLCHAR name[64], sex[8], score[8];
SQLLEN len1, len2, len3;
while (SQLFetch(hstmt) == SQL_SUCCESS)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, name, sizeof(name), &len1);
SQLGetData(hstmt, 2, SQL_C_CHAR, sex, sizeof(sex), &len2);
SQLGetData(hstmt, 3, SQL_C_CHAR, score, sizeof(score), &len3);
printf(“%s\t%s\t%s\n”, name, sex, score);
}
}
//查询失败
else
{
//TODO: 处理执行SQL语句失败的情况
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt); //释放语句句柄
}
//连接失败
else
{
//TODO: 处理连接失败的情况
}
//释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
//释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
“`
在上面的代码中,我们首先组织了一条SELECT语句,然后使用SQLExecDirect函数将其发送到Access数据库中执行。接着使用SQLGetData函数获取查询结果,并将其输出到控制台。这里我们假设Students表中有三个字段,分别是姓名、性别和成绩。
四、插入和更新数据
除了查询数据,我们还可以使用SQL语句插入和更新数据。下面是一个例子,展示了如何向Access数据库中插入一条记录:
“`c
#include
#include
#include
#include
int mn(void)
{
SQLHENV henv; //环境句柄
SQLHDBC hdbc; //连接句柄
SQLHSTMT hstmt; //语句句柄
SQLRETURN retcode; //返回值
//分配环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
//设置环境属性
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
//分配连接句柄
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
retcode = SQLConnect(hdbc, (SQLCHAR*)”TestDB”, SQL_NTS, (SQLCHAR*)NULL, 0, NULL, 0);
//连接成功
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
char sql[256] = “INSERT INTO Students(Name,Sex,Score) VALUES(‘Tom’,’Male’,’80’)”;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //分配语句句柄
retcode = SQLExecDirect(hstmt, (SQLCHAR*)sql, SQL_NTS); //执行SQL语句
//插入成功
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf(“插入成功!\n”);
}
//插入失败
else
{
//TODO: 处理执行SQL语句失败的情况
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt); //释放语句句柄
}
//连接失败
else
{
//TODO: 处理连接失败的情况
}
//释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
//释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
“`
在上面的代码中,我们使用INSERT INTO语句向Students表中插入了一条记录。实际开发中,还可以使用UPDATE语句更新数据,使用DELETE语句删除数据,这里就不再赘述了。