【C语言轻松征服Access数据库】高效数据操作与交互指南

日期:

最佳答案

引言

C言语作为一种高效、机动的编程言语,在数据库编程范畴同样表示出色。Access数据库作为一款广泛利用的数据库管理体系,与C言语的结合可能供给富强的数据操纵才能。本文将具体介绍如何在C言语中操纵Access数据库,包含连接、查询、拔出、更新跟删除数据等操纵。

筹备任务

在开端之前,请确保以下筹备任务已实现:

  1. 安装Microsoft Access数据库引擎:确保体系上已安装Microsoft Access数据库引擎,以便经由过程ODBC连接到Access数据库文件。
  2. 设置ODBC数据源:在Windows体系中,打开“把持面板”中的“管理东西”,找到“ODBC数据源(32位或64位)”,在“用户DSN”或“体系DSN”标签页中,点击“增加”按钮,抉择“Microsoft Access Driver (.mdb, .accdb)”,然后填写数据源称号(DSN),并指定Access数据库文件的道路。

连接到Access数据库

以下是利用C言语连接到Access数据库的步调:

#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>

int main() {
    SQLHENV hEnv; // 情况句柄
    SQLHDBC hDbc; // 连接句柄
    SQLRETURN ret; // 前去状况

    // 分配情况句柄
    ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
    if (ret != SQL_SUCCESS) {
        printf("情况句柄分配掉败。\n");
        return 1;
    }

    // 设置情况属性
    ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
    if (ret != SQL_SUCCESS) {
        printf("设置情况属性掉败。\n");
        return 1;
    }

    // 分配连接句柄
    ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
    if (ret != SQL_SUCCESS) {
        printf("连接句柄分配掉败。\n");
        return 1;
    }

    // 连接到数据源
    ret = SQLConnect(hDbc, (SQLCHAR*)"MyAccessDB", SQL_NTS, (SQLCHAR*)"user", SQL_NTS, (SQLCHAR*)"password", SQL_NTS);
    if (ret != SQL_SUCCESS) {
        printf("连接掉败。\n");
        return 1;
    }

    printf("连接成功。\n");

    // ... 其他操纵 ...

    // 断开连接
    SQLDisconnect(hDbc);

    // 开释句柄
    SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
    SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

    return 0;
}

数据操纵

查询数据

// ... 连接数据库 ...

// 申明语句句柄
SQLHSTMT hStmt;

// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if (ret != SQL_SUCCESS) {
    printf("语句句柄分配掉败。\n");
    return 1;
}

// 筹备查询语句
ret = SQLExecDirect(hStmt, (SQLCHAR*)"SELECT * FROM MyTable", SQL_NTS);
if (ret != SQL_SUCCESS) {
    printf("履行查询掉败。\n");
    return 1;
}

// 读取成果
SQLINTEGER i;
SQLINTEGER col1;
while ((ret = SQLFetch(hStmt)) == SQL_SUCCESS) {
    SQLGetData(hStmt, 1, SQL_C_LONG, &col1, 0, 0);
    printf("Column 1: %ld\n", col1);
}

// 开释句柄
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

// ... 断开连接 ...

拔出数据

// ... 连接数据库 ...

// 申明语句句柄
SQLHSTMT hStmt;

// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if (ret != SQL_SUCCESS) {
    printf("语句句柄分配掉败。\n");
    return 1;
}

// 筹备拔出语句
ret = SQLExecDirect(hStmt, (SQLCHAR*)"INSERT INTO MyTable (Column1, Column2) VALUES (?, ?)", SQL_NTS);
if (ret != SQL_SUCCESS) {
    printf("履行拔出掉败。\n");
    return 1;
}

// 绑定参数
SQLINTEGER col1 = 10;
SQLINTEGER col2 = 20;
ret = SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &col1, 0, NULL);
ret = SQLBindParameter(hStmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &col2, 0, NULL);
if (ret != SQL_SUCCESS) {
    printf("绑定参数掉败。\n");
    return 1;
}

// 履行拔出
ret = SQLExecute(hStmt);
if (ret != SQL_SUCCESS) {
    printf("履行拔出掉败。\n");
    return 1;
}

// 开释句柄
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

// ... 断开连接 ...

更新数据

// ... 连接数据库 ...

// 申明语句句柄
SQLHSTMT hStmt;

// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if (ret != SQL_SUCCESS) {
    printf("语句句柄分配掉败。\n");
    return 1;
}

// 筹备更新语句
ret = SQLExecDirect(hStmt, (SQLCHAR*)"UPDATE MyTable SET Column1 = ? WHERE Column2 = ?", SQL_NTS);
if (ret != SQL_SUCCESS) {
    printf("履行更新掉败。\n");
    return 1;
}

// 绑定参数
SQLINTEGER col1 = 30;
SQLINTEGER col2 = 40;
ret = SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &col1, 0, NULL);
ret = SQLBindParameter(hStmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &col2, 0, NULL);
if (ret != SQL_SUCCESS) {
    printf("绑定参数掉败。\n");
    return 1;
}

// 履行更新
ret = SQLExecute(hStmt);
if (ret != SQL_SUCCESS) {
    printf("履行更新掉败。\n");
    return 1;
}

// 开释句柄
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

// ... 断开连接 ...

删除数据

// ... 连接数据库 ...

// 申明语句句柄
SQLHSTMT hStmt;

// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if (ret != SQL_SUCCESS) {
    printf("语句句柄分配掉败。\n");
    return 1;
}

// 筹备删除语句
ret = SQLExecDirect(hStmt, (SQLCHAR*)"DELETE FROM MyTable WHERE Column2 = ?", SQL_NTS);
if (ret != SQL_SUCCESS) {
    printf("履行删除掉败。\n");
    return 1;
}

// 绑定参数
SQLINTEGER col2 = 50;
ret = SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &col2, 0, NULL);
if (ret != SQL_SUCCESS) {
    printf("绑定参数掉败。\n");
    return 1;
}

// 履行删除
ret = SQLExecute(hStmt);
if (ret != SQL_SUCCESS) {
    printf("履行删除掉败。\n");
    return 1;
}

// 开释句柄
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

// ... 断开连接 ...

总结

经由过程以上步调,你可能利用C言语轻松地操纵Access数据库,实现数据的查询、拔出、更新跟删除。这些操纵可能有效地帮助你管理数据库中的数据,并进步数据处理的效力。在现实利用中,你可能根据须要调剂跟优化代码,以满意特定的须要。