C语言实现存取MSSQL数据库

1. 介绍

C语言是一种广泛使用的编程语言。它的优点是高效、跨平台、可移植等,因此它在很多应用场景中都十分重要。MSSQL数据库是一种常用的数据库,它使用SQL语句进行数据管理。在本文中,我们将介绍如何使用C语言来存取MSSQL数据库。

2. 安装MSSQL ODBC Driver

在使用C语言存取MSSQL数据库之前,需要先安装ODBC Driver,因为ODBC Driver 实现了C语言与MSSQL数据库的通信。ODBC Driver是一种标准的数据库驱动,它可以将不同的数据库连接到同一个应用程序中。

要安装MSSQL ODBC Driver,可以参考如下步骤:

2.1 访问Microsoft官网

打开Microsoft官网,点击下载,找到ODBC驱动下载页面。

2.2 下载ODBC Driver

按照安装指引,下载适用于您的操作系统的ODBC Driver。下载完成后,运行安装程序。

2.3 安装ODBC Driver

安装程序会询问安装类型。如果您计划只在本地使用MSSQL数据库,则选择本地安装;如果您希望其他计算机也可以使用该驱动程序,则选择全局安装。

在安装过程中,您还需要提供MSSQL数据库的连接信息。

3. 连接到MSSQL数据库

要在C语言中连接到MSSQL数据库,需要包含ODBC头文件并使用ODBC库函数。下面是连接到MSSQL数据库的示例代码:

#include

#include

#include

#include

SQLHENV env;

SQLHDBC dbc;

SQLHSTMT stmt;

SQLRETURN ret;

SQLCHAR *dsn = (SQLCHAR *)"DataSourceName";

SQLCHAR *user = (SQLCHAR *)"UserName";

SQLCHAR *pass = (SQLCHAR *)"Password";

// 连接到数据源

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);

ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

ret = SQLConnect(dbc, dsn, SQL_NTS, user, SQL_NTS, pass, SQL_NTS);

在上面的代码中,dsn、user 和 pass 分别是您的MSSQL连接信息。SQLAllocHandle用于分配ODBC环境、连接和语句句柄。SQLSetEnvAttr指定ODBC版本。SQLConnect用于连接到MSSQL数据库。

如果连接成功,则可以使用stmt进行操作。

4. SQL查询

在C语言中,要执行一个SQL查询,需要将查询字符串传递给SQLExecDirect函数,并使用SQLFetch函数获取结果集。以下是一个简单的查询示例:

SELECT * FROM MyTable

SQLCHAR *query = (SQLCHAR*)"SELECT * FROM MyTable";

ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

ret = SQLExecDirect(stmt, query, SQL_NTS);

if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {

SQLINTEGER icol = 1;

SQLLEN indicator = 0;

SQLCHAR colName[256];

SQLCHAR colData[256];

while (SQLDescribeCol(stmt, icol, colName, 256, NULL, NULL, NULL, NULL, NULL) == SQL_SUCCESS) {

printf("%s \t", colName);

icol++;

}

printf("\n");

while (SQLFetch(stmt) == SQL_SUCCESS) {

icol = 1;

while (SQLGetData(stmt, icol, SQL_C_CHAR, colData, 256, &indicator) == SQL_SUCCESS) {

if (indicator == SQL_NULL_DATA) {

printf("NULL\t");

} else {

printf("%s\t", colData);

}

icol++;

}

printf("\n");

}

}

SQLFreeHandle(SQL_HANDLE_STMT,stmt);

在上面的代码中,query是SQL查询语句,dbc是连接句柄,stmt是语句句柄。使用SQLAllocHandle分配语句句柄,使用SQLExecDirect执行查询。然后使用SQLFetch和SQLGetData从结果集中获取数据。最后使用SQLFreeHandle释放语句句柄。

5. SQL插入

要在MSSQL数据库中插入数据,可以使用SQLExecDirect或SQLPrepare/ SQLExecute函数。以下是一个示例代码:

INSERT INTO MyTable (col1, col2, col3) VALUES ('value1', 'value2', 'value3')

SQLCHAR *insert = (SQLCHAR*)"INSERT INTO MyTable (col1, col2, col3) VALUES ('value1', 'value2', 'value3')";

ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

ret = SQLPrepare(stmt, insert, SQL_NTS);

if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {

ret = SQLExecute(stmt);

}

SQLFreeHandle(SQL_HANDLE_STMT,stmt);

在上面的代码中,insert是插入语句,使用SQLAllocHandle分配语句句柄,使用SQLPrepare编译插入语句,使用SQLExecute执行插入。然后使用SQLFreeHandle释放语句句柄。

6. SQL更新和删除

要更新或删除MSSQL数据库中的数据,可以使用SQLExecDirect或SQLPrepare/ SQLExecute函数。以下是一个示例代码:

UPDATE MyTable SET col2 = 'new_value' WHERE col1 = 'value1'

SQLCHAR *update = (SQLCHAR*)"UPDATE MyTable SET col2 = 'new_value' WHERE col1 = 'value1'";

ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

ret = SQLPrepare(stmt, update, SQL_NTS);

if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {

ret = SQLExecute(stmt);

}

SQLFreeHandle(SQL_HANDLE_STMT,stmt);

DELETE FROM MyTable WHERE col1 = 'value1'

SQLCHAR *delete = (SQLCHAR*)"DELETE FROM MyTable WHERE col1 = 'value1'";

ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

ret = SQLPrepare(stmt, delete, SQL_NTS);

if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {

ret = SQLExecute(stmt);

}

SQLFreeHandle(SQL_HANDLE_STMT,stmt);

7. 关闭连接

在程序结束时,需要关闭数据库连接并释放ODBC环境句柄。以下是关闭连接的示例代码:

ret = SQLDisconnect(dbc);

SQLFreeHandle(SQL_HANDLE_DBC,dbc);

SQLFreeHandle(SQL_HANDLE_ENV,env);

在上面的代码中,使用SQLDisconnect关闭数据库连接,然后使用SQLFreeHandle释放句柄。

以上是使用C语言访问MSSQL数据库的基本方法和示例代码。有了这些基础知识,您可以编写更复杂的应用程序,以满足特定的需求。

数据库标签