C言语作为一种高效、机动的编程言语,在数据库编程范畴同样表示出色。Access数据库作为一款广泛利用的数据库管理体系,与C言语的结合可能供给富强的数据操纵才能。本文将具体介绍如何在C言语中操纵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数据库,实现数据的查询、拔出、更新跟删除。这些操纵可能有效地帮助你管理数据库中的数据,并进步数据处理的效力。在现实利用中,你可能根据须要调剂跟优化代码,以满意特定的须要。