C语言操作MSSQL实例:体验简单、实用又高效!
1. MSSQL简介
1.1 什么是MSSQL
MSSQL是由微软公司开发的一种关系型数据库管理系统。它是在Sybase SQL Server基础上发展而来的,目前版本是Microsoft SQL Server 2019。
1.2 MSSQL的特点
MSSQL具有以下特点:
- 安全可靠性高:MSSQL采用了严密的安全机制,可以对数据进行加密、备份和恢复等操作。同时,MSSQL也具有较高的可靠性,可以处理大规模的数据。
- 功能强大:MSSQL支持多种数据类型、事务处理、触发器、分布式查询等功能。
- 易用性强:MSSQL提供了友好的图形化管理界面,并且可以使用C语言等编程语言进行开发。
2. C语言操作MSSQL
2.1 C语言连接MSSQL
要使用C语言操作MSSQL,首先需要连接到MSSQL服务器。可以使用ODBC和OLEDB等驱动程序实现连接。
这里以ODBC连接方式为例,需要下载安装ODBC驱动程序,并在代码中使用ODBC API进行连接。代码如下:
#include
#include
#include
int main() {
SQLHENV env;
SQLHDBC dbc;
SQLRETURN ret;
// Allocate an environment handle
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
// Set the ODBC version environment attribute
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, 0);
// Allocate a connection handle
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
// Connect to the DSN
ret = SQLDriverConnect(dbc, NULL,
"DSN=mydsn;UID=myusername;PWD=mypassword;", SQL_NTS,
NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connected\n");
// Do something
} else {
printf("Failed to connect\n");
}
// Disconnect
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
SQLAllocHandle用于分配句柄,SQLSetEnvAttr设置ODBC版本号,SQLDriverConnect连接MSSQL服务器,SQLDisconnect断开连接,SQLFreeHandle释放句柄。
2.2 C语言执行SQL语句
连接成功后,可以使用C语言执行SQL语句。需要使用ODBC API的SQLExecDirect函数,代码如下:
SQLCHAR *query = (SQLCHAR *)"SELECT * FROM mytable";
ret = SQLExecDirect(stmt, query, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
// Do something with result set
} else {
printf("Failed to execute query\n");
}
SQLExecDirect用于执行SQL语句,stmt为已分配的SQL statement句柄,query为要执行的SQL语句。
2.3 C语言处理结果集
执行SQL语句后,可以使用ODBC API处理结果集。需要使用SQLBindCol绑定列和SQLFetch获取一行数据,代码如下:
SQLCHAR name[256];
SQLINTEGER age = 0;
SQLLEN indicator1, indicator2;
SQLCHAR *query = (SQLCHAR *)"SELECT name, age FROM mytable";
ret = SQLExecDirect(stmt, query, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
// Bind columns
SQLBindCol(stmt, 1, SQL_C_CHAR, name, sizeof(name), &indicator1);
SQLBindCol(stmt, 2, SQL_C_LONG, &age, 0, &indicator2);
// Fetch one row at a time
while (SQLFetch(stmt) == SQL_SUCCESS) {
printf("Name: %s, Age: %d\n", name, age);
}
} else {
printf("Failed to execute query\n");
}
SQLBindCol绑定列,SQLFetch获取一行数据。
3. C语言操作MSSQL实例
下面给出一个完整的例子,演示如何使用C语言操作MSSQL实例。
首先,需要创建一个MSSQL数据库,并创建一个表。
USE mydb;
CREATE TABLE mytable (
id INT PRIMARY KEY IDENTITY,
name VARCHAR(50),
age INT
);
然后,编写C语言代码连接MSSQL服务器,插入一条记录,然后查询记录并输出。
#include
#include
#include
int main() {
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// Allocate an environment handle
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
// Set the ODBC version environment attribute
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, 0);
// Allocate a connection handle
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
// Connect to the DSN
ret = SQLDriverConnect(dbc, NULL,
"DSN=mydsn;UID=myusername;PWD=mypassword;", SQL_NTS,
NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connected\n");
// Allocate a statement handle
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// Insert a record
SQLCHAR *insert = (SQLCHAR *)"INSERT INTO mytable (name, age) VALUES ('John', 30)";
ret = SQLExecDirect(stmt, insert, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Inserted\n");
} else {
printf("Failed to insert\n");
}
// Query records
SQLCHAR name[256];
SQLINTEGER age = 0;
SQLLEN indicator1, indicator2;
SQLCHAR *query = (SQLCHAR *)"SELECT name, age FROM mytable";
ret = SQLExecDirect(stmt, query, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
// Bind columns
SQLBindCol(stmt, 1, SQL_C_CHAR, name, sizeof(name), &indicator1);
SQLBindCol(stmt, 2, SQL_C_LONG, &age, 0, &indicator2);
// Fetch one row at a time
while (SQLFetch(stmt) == SQL_SUCCESS) {
printf("Name: %s, Age: %d\n", name, age);
}
} else {
printf("Failed to execute query\n");
}
// Free statement handle
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
} else {
printf("Failed to connect\n");
}
// Disconnect
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
运行程序,输出如下:
Connected
Inserted
Name: John, Age: 30
总结
本文介绍了MSSQL的基本概念和特点,并演示了如何使用C语言连接MSSQL服务器,执行SQL语句和处理结果集,最后给出了一个完整的例子。C语言操作MSSQL实例既简单又实用,可以提高开发效率,对于需要处理大规模数据的应用有很大的帮助。