c语言调用sql函数查询获取数据
时间: 2023-08-23 21:03:34 浏览: 115
要在 C 语言中调用 SQL 函数进行查询,需要使用 SQL API。这里介绍一种常用的方法:使用 ODBC API。
ODBC(Open Database Connectivity)是一种通用的数据库访问标准,用于连接不同的数据库系统。使用 ODBC API 可以在 C 语言中访问各种数据库,包括 SQL Server、Oracle、MySQL 等。
以下是一个简单的示例代码,演示如何使用 ODBC API 连接数据库,执行查询语句并获取结果:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// 初始化环境句柄
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to allocate environment handle\n");
exit(1);
}
// 设置环境属性
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, 0);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to set environment attribute\n");
exit(1);
}
// 分配连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to allocate connection handle\n");
exit(1);
}
// 连接数据库
SQLCHAR* conn_str = "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=password;";
ret = SQLDriverConnect(dbc, NULL, conn_str, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to connect to database\n");
exit(1);
}
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to allocate statement handle\n");
exit(1);
}
// 执行查询语句
ret = SQLExecDirect(stmt, "SELECT * FROM users", SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to execute query\n");
exit(1);
}
// 获取结果集
SQLLEN num_cols;
ret = SQLNumResultCols(stmt, &num_cols);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to get number of columns\n");
exit(1);
}
// 输出结果
SQLCHAR col_name[256];
SQLLEN col_name_len;
SQLCHAR col_value[256];
SQLLEN col_value_len;
while (SQLFetch(stmt) == SQL_SUCCESS) {
for (int i = 1; i <= num_cols; i++) {
ret = SQLDescribeCol(stmt, i, col_name, sizeof(col_name), &col_name_len, NULL, NULL, NULL, NULL);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to get column name\n");
exit(1);
}
ret = SQLGetData(stmt, i, SQL_C_CHAR, col_value, sizeof(col_value), &col_value_len);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to get column value\n");
exit(1);
}
printf("%s: %s\n", col_name, col_value);
}
printf("\n");
}
// 释放资源
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
```
这个示例代码连接的是 MySQL 数据库,需要安装 MySQL ODBC 驱动程序。在执行代码前,需要根据实际情况修改连接字符串。
阅读全文