轻松学习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语句删除数据,这里就不再赘述了。


数据运维技术 » 轻松学习C语言中的Access数据库应用 (c 使用access数据库)