📜  ODBC完整格式(1)

📅  最后修改于: 2023-12-03 15:18:05.700000             🧑  作者: Mango

ODBC完整格式

ODBC是一种开放式数据库连接技术,支持跨平台数据库连接,提供了一套标准的API接口,方便开发人员通过这些接口来访问不同的数据库。

ODBC连接参数

当使用ODBC来连接数据库时,需要指定一些参数来描述数据库的位置和连接属性。这些参数可以在ODBC数据源中配置,也可以在程序中指定。以下是一些常用的连接参数:

  • Driver:指定ODBC使用的驱动程序。
  • Server:指定服务器名称或IP地址。
  • Database:指定数据库名称。
  • UID:指定用户名。
  • PWD:指定密码。
  • Port:指定数据库端口号。
  • DSN:指定数据源名称。
ODBC API

ODBC API是一组标准的C语言函数,用于访问ODBC数据源。以下是一些常用的ODBC函数:

  • SQLAllocHandle:分配ODBC句柄。
  • SQLConnect:连接到数据源。
  • SQLExecDirect:执行SQL语句。
  • SQLBindCol:绑定结果集列。
  • SQLFetch:提取结果集行。
  • SQLDisconnect:断开与数据源的连接。
  • SQLFreeHandle:释放ODBC句柄。
示例代码

下面是一个使用ODBC连接MySQL数据库的示例代码:

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

int main()
{
    // 分配ODBC环境句柄
    SQLHENV env;
    SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env);
    SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

    // 分配ODBC连接句柄
    SQLHDBC dbc;
    SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

    // 连接到MySQL数据库
    SQLCHAR* driver = (SQLCHAR*)"MySQL ODBC 8.0 ANSI Driver";
    SQLCHAR* server = (SQLCHAR*)"localhost";
    SQLCHAR* database = (SQLCHAR*)"test";
    SQLCHAR* uid = (SQLCHAR*)"root";
    SQLCHAR* pwd = (SQLCHAR*)"123456";
    SQLCHAR conn_str[1024];
    SQLSMALLINT conn_str_len;
    SQLRETURN ret;
    sprintf(conn_str, "DRIVER=%s;SERVER=%s;DATABASE=%s;UID=%s;PWD=%s;", driver, server, database, uid, pwd);
    conn_str_len = (SQLSMALLINT)strlen(conn_str);
    ret = SQLDriverConnect(dbc, NULL, conn_str, conn_str_len, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
    if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
    {
        printf("Failed to connect to MySQL database.\n");
        return 1;
    }

    // 查询数据
    SQLHSTMT stmt;
    SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
    SQLCHAR* sql = (SQLCHAR*)"SELECT * FROM users";
    ret = SQLExecDirect(stmt, sql, SQL_NTS);
    if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
    {
        printf("Failed to execute SQL statement.\n");
        return 1;
    }
    int id;
    SQLCHAR name[256];
    while (SQLFetch(stmt) == SQL_SUCCESS)
    {
        SQLGetData(stmt, 1, SQL_C_LONG, &id, 0, NULL);
        SQLGetData(stmt, 2, SQL_C_CHAR, name, sizeof(name), NULL);
        printf("id=%d, name=%s\n", id, name);
    }

    // 断开连接
    SQLFreeHandle(SQL_HANDLE_STMT, stmt);
    SQLDisconnect(dbc);
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);

    return 0;
}
参考资料