1、安装ODBC驱动:Windows系统通常自带SQL Server ODBC驱动,但也可以到微软官网下载最新版本,在Linux系统上,可以使用包管理器安装,例如在Ubuntu上执行sudo apt-get install unixodbc unixodbc-dev
。
2、安装Microsoft SQL Server Native Client:从微软官网下载并安装,它提供了更为专用的功能和优化。
连接字符串包含数据库服务器的地址、端口、用户名、密码、数据库名称等信息。const char* connectionString = "DSN=DataSourceName;UID=username;PWD=password;Database=mydatabase";
。
以下是一个使用ODBC API连接到SQL Server的示例代码:
#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) { fprintf(stderr, "Error allocating environment handle "); return -1; } // 设置ODBC版本 ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (ret != SQL_SUCCESS) { fprintf(stderr, "Error setting ODBC version "); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return -1; } // 分配连接句柄 ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); if (ret != SQL_SUCCESS) { fprintf(stderr, "Error allocating connection handle "); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return -1; } // 建立数据库连接 ret = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)connectionString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { fprintf(stderr, "Error connecting to the database "); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return -1; } printf("Connected to the database successfully! "); // 这里可以执行SQL查询操作 // 关闭连接 SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return 0; }
成功连接数据库后,可以使用SQLExecDirect
函数执行SQL语句。
SQLHSTMT hstmt; SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hstmt); SQLCHAR *sqlQuery = "SELECT * FROM my_table"; // 替换为你的查询语句 SQLExecDirect(hstmt, sqlQuery, SQL_NTS); while (SQLFetch(hstmt) == SQL_SUCCESS) { SQLCHAR columnName[100]; SQLINTEGER columnValue; // 通过列索引获取数据 SQLGetData(hstmt, 1, SQL_C_CHAR, columnName, sizeof(columnName), NULL); SQLGetData(hstmt, 2, SQL_C_LONG, &columnValue, 0, NULL); printf("%s: %d ", columnName, columnValue); } // 释放句柄 SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
使用SQLFetch
函数获取查询结果,并使用SQLGetData
函数读取每一列的数据。
在完成数据库操作后,需要关闭连接并释放分配的句柄,以避免内存泄漏和资源浪费。SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
。