清给我一份基于c语言使用ODBC API执行SQL语句的仓库设备管理系统数据库代码
时间: 2024-01-24 21:02:18 浏览: 25
好的,以下是使用 C 语言和 ODBC API 实现的仓库设备管理系统数据库代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
#define SQL_RESULT_LEN 240
#define SQL_RETURN_CODE_LEN 1000
SQLCHAR sql_result[SQL_RESULT_LEN];
SQLCHAR sql_return_code[SQL_RETURN_CODE_LEN];
void show_error(unsigned int handle_type, const SQLHANDLE& handle) {
SQLCHAR sqlstate[1024];
SQLCHAR message[1024];
if (SQL_SUCCESS == SQLGetDiagRec(handle_type, handle, 1, sqlstate, NULL, message, 1024, NULL)) {
printf("Message: %s\nSQLSTATE: %s\n", message, sqlstate);
}
}
int main() {
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
SQLINTEGER id;
SQLCHAR name[20], type[20];
// 初始化环境句柄
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error allocating environment handle.\n");
return 1;
}
// 设置环境属性
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error setting environment attribute.\n");
show_error(SQL_HANDLE_ENV, env);
return 1;
}
// 初始化连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error allocating connection handle.\n");
show_error(SQL_HANDLE_ENV, env);
return 1;
}
// 连接数据库
ret = SQLConnect(dbc, (SQLCHAR*)"database_name", SQL_NTS, (SQLCHAR*)"username", SQL_NTS, (SQLCHAR*)"password", SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error connecting to database.\n");
show_error(SQL_HANDLE_DBC, dbc);
return 1;
}
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error allocating statement handle.\n");
show_error(SQL_HANDLE_DBC, dbc);
return 1;
}
// 执行 SQL 语句
ret = SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM equipment", SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Error executing SQL statement.\n");
show_error(SQL_HANDLE_STMT, stmt);
return 1;
}
// 获取结果集
while (SQLFetch(stmt) == SQL_SUCCESS) {
SQLGetData(stmt, 1, SQL_INTEGER, &id, 0, NULL);
SQLGetData(stmt, 2, SQL_CHAR, name, 20, NULL);
SQLGetData(stmt, 3, SQL_CHAR, type, 20, NULL);
printf("%d\t%s\t%s\n", id, name, type);
}
// 释放语句句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
// 断开连接
SQLDisconnect(dbc);
// 释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
// 释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
```
注意:这只是一个示例代码,需要根据实际情况进行修改和完善,比如更改数据库连接信息、SQL 语句、数据类型等。同时,也需要保证数据库中有名为 "equipment" 的表,并且该表中有 id、name、type 三列数据。