C程序连接MSSQL的简易操作指南

1. MSSQL简介

Microsoft SQL Server(MSSQL)是一个关系型数据库管理系统,常用于大型企业级应用中。其功能非常强大,支持高并发、分布式部署、数据备份恢复等。

MSSQL提供了多种编程语言的API,包括C、C++、.NET、Java等。其中,C API使用较为广泛,本文主要讲解基于C API连接MSSQL数据库的方法。

2. MSSQL C API介绍

MSSQL C API提供了一套标准的函数库,用于C程序连接MSSQL数据库。以下是一些常用的函数:

2.1. SQLAllocHandle函数

SQLAllocHandle函数可以申请内存并创建一个SQLHandle句柄。SQLHandle句柄用于管理连接、语句、结果集等对象。

SQLRETURN SQLAllocHandle(

SQLSMALLINT HandleType,

SQLHANDLE InputHandle,

SQLHANDLE *OutputHandlePtr

);

参数说明:

HandleType:要创建的句柄类型

InputHandle:输入句柄,若为NULL,则创建新句柄;否则在该句柄的基础上创建新句柄

OutputHandlePtr:输出句柄指针,该参数用于返回创建的新句柄

2.2. SQLConnect函数

SQLConnect函数用于连接到MSSQL数据库。

SQLRETURN SQLConnect(

SQLHDBC ConnectionHandle,

SQLTCHAR *ServerName,

SQLSMALLINT NameLength1,

SQLTCHAR *UserName,

SQLSMALLINT NameLength2,

SQLTCHAR *Authentication,

SQLSMALLINT NameLength3

);

参数说明:

ConnectionHandle:连接句柄,由SQLAllocHandle函数创建

ServerName:数据库服务器名称

NameLength1:服务器名称长度

UserName:登录数据库的用户名

NameLength2:用户名长度

Authentication:登录数据库的密码

NameLength3:密码长度

2.3. SQLExecDirect函数

SQLExecDirect函数用于执行SQL语句。该函数会返回一个结果集句柄,用于存储查询结果。

SQLRETURN SQLExecDirect(

SQLHSTMT StatementHandle,

SQLTCHAR *StatementText,

SQLINTEGER TextLength

);

参数说明:

StatementHandle:语句句柄,由SQLAllocHandle函数创建

StatementText:要执行的SQL语句

TextLength:SQL语句长度

2.4. SQLBindCol函数

SQLBindCol函数用于将结果集中的列与存储位置进行绑定。在执行SQL语句之后,使用该函数将结果集中的列值存储到指定的变量中。

SQLRETURN SQLBindCol(

SQLHSTMT StatementHandle,

SQLUSMALLINT ColumnNumber,

SQLSMALLINT TargetType,

SQLPOINTER TargetValue,

SQLINTEGER BufferLength,

SQLLEN *StrLen_or_Ind

);

参数说明:

StatementHandle:语句句柄,由SQLAllocHandle函数创建

ColumnNumber:要绑定的列序号

TargetType:存储位置数据类型,如SQL_INTEGER

TargetValue:存储位置的指针

BufferLength:存储位置的大小

StrLen_or_Ind:存储位置数据长度指针,用于存储该列的实际长度

2.5. SQLFetch函数

SQLFetch函数用于获取结果集的下一行数据。该函数会将结果集中的数据存储到使用SQLBindCol函数绑定的存储位置中。

SQLRETURN SQLFetch(SQLHSTMT StatementHandle);

参数说明:

StatementHandle:语句句柄,由SQLAllocHandle函数创建

3. C程序连接MSSQL数据库的具体操作

以下是一个简单的C程序,用于连接MSSQL数据库并查询表格中的数据:

#include <stdio.h>

#include <sql.h>

#include <sqlext.h>

int main() {

// 申请环境句柄

SQLHENV env;

SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);

SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

// 申请连接句柄

SQLHDBC dbc;

SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

// 连接数据库

SQLCHAR *dsn = (SQLCHAR*)"MSSQL"; // DSN名称

SQLCHAR *user = (SQLCHAR*)"sa"; // 数据库用户名

SQLCHAR *pwd = (SQLCHAR*)"password"; // 数据库密码

SQLRETURN ret = SQLConnect(dbc, dsn, SQL_NTS, user, SQL_NTS, pwd, SQL_NTS);

if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {

SQLCHAR sqlstate[6], message[256];

SQLINTEGER sqlcode;

SQLError(NULL, dbc, SQL_NULL_HSTMT, sqlstate, &sqlcode, message, 256, NULL);

printf("Connect to MSSQL failed: %s (%d)\n", message, sqlstate);

return -1;

}

printf("Connect to MSSQL successfully\n");

// 执行查询语句

SQLHSTMT stmt;

SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

SQLCHAR *query = (SQLCHAR*)"SELECT * FROM Table1"; // 要执行的SQL语句

SQLExecDirect(stmt, query, SQL_NTS);

// 绑定结果集

SQLINTEGER id, age;

SQLCHAR name[20], gender[10];

SQLBindCol(stmt, 1, SQL_C_LONG, &id, sizeof(SQLINTEGER), NULL);

SQLBindCol(stmt, 2, SQL_C_CHAR, name, 20, NULL);

SQLBindCol(stmt, 3, SQL_C_CHAR, gender, 10, NULL);

SQLBindCol(stmt, 4, SQL_C_LONG, &age, sizeof(SQLINTEGER), NULL);

// 获取查询结果

while (SQLFetch(stmt) == SQL_SUCCESS) {

printf("%d\t%s\t%s\t%d\n", id, name, gender, age);

}

// 释放资源

SQLFreeHandle(SQL_HANDLE_STMT, stmt);

SQLDisconnect(dbc);

SQLFreeHandle(SQL_HANDLE_DBC, dbc);

SQLFreeHandle(SQL_HANDLE_ENV, env);

return 0;

}

该程序首先申请了环境句柄和连接句柄,并连接到了MSSQL数据库。然后,它执行了一条SELECT语句,并使用SQLBindCol函数绑定了结果集。最后,使用SQLFetch函数逐行获取查询结果。

4. 总结

通过本文的介绍,我们了解了MSSQL C API的基本函数,并编写了一个C程序用于连接MSSQL数据库和执行查询操作。希望本文对初学者有所帮助。

数据库标签