c语言连接sql sever
时间: 2023-08-03 15:03:36 浏览: 58
要在C语言中连接SQL Server,您需要使用ODBC API,这是用于访问SQL Server的标准API。以下是一个基本的连接示例:
```
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
int main() {
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// Allocate environment handle
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");
return 1;
}
// Set the ODBC version to use
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 ODBC version.\n");
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// Allocate connection handle
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to allocate connection handle.\n");
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// Connect to the database
ret = SQLConnect(dbc, (SQLCHAR*)"YOUR_DSN_NAME", SQL_NTS, NULL, 0, NULL, 0);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to connect to database.\n");
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// Allocate statement handle
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to allocate statement handle.\n");
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// Execute a query
ret = SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM YOUR_TABLE", SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
printf("Failed to execute query.\n");
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// Fetch the results
while (SQLFetch(stmt) == SQL_SUCCESS) {
// Process each row here
}
// Clean up
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
```
请注意,您需要将`YOUR_DSN_NAME`替换为您的DSN名称,并且需要根据您的SQL Server设置进行其他修改。此外,此示例仅演示了如何执行查询并检索结果,您需要根据您的需求自行编写其他SQL语句。