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数据库的基本方法和示例代码。有了这些基础知识,您可以编写更复杂的应用程序,以满足特定的需求。