实例演示:C语言在SQL数据库中的增删改查 (sql数据库c 增删改查案例)
近年来随着信息技术的快速发展,数据成为了企业的核心资源之一,而数据库管理系统(DBMS)便成为企业中管理数据最常用的方式。常见的DBMS有MySQL、Oracle、SQL Server等,其中SQL Server是微软公司推出的一种关系型数据库管理系统,具有高效稳定、易操作等特点,被广泛应用于企业中。而在C语言开发中,与SQL Server协作,能够方便地访问和查询数据库,实现数据的快速获取和处理。本文将介绍C语言在SQL数据库中实例演示的增删改查操作。
一、连接SQL Server数据库
C语言操作SQL Server,需要借助ODBC(Open Database Connectivity,开放式数据库互连)技术,ODBC提供了一套应用程序接口(API),用于访问各种数据库。需要先安装ODBC驱动程序才能连接SQL Server数据库。接下来,我们将通过C语言进行连接SQL Server数据库。
1.1 配置ODBC数据源
我们需要在系统中配置ODBC数据源,以便C语言程序能够连接数据库。具体操作如下:
a.在控制面板中找到“管理员工具”;
b.双击打开“ODBC数据源(32位)”;
c.在弹出的窗口中,选择“系统DSN”标签页,并点击下方的“添加”按钮;
d.选择“SQL Server Native Client 11.0”(驱动名根据实际安装的驱动程序而定),在“名称”中输入DSN名称,然后在“服务器”中输入服务器地址,最后点击“下一步”;
e.选择“使用SQL Server身份验证”,在“登录ID”和“密码”中输入登录SQL Server的用户名和密码,然后取消“默认的数据库”选项卡,最后点击“完成”。
至此,ODBC数据源的配置已经完成,在C语言中可通过这个配置完成连接SQL Server。
1.2 连接数据库
在C语言中连接数据库的方法,常常是引用ODBC的API。具体连接方法代码如下:
#include “stdio.h”
#include “sql.h”
#include “sqlext.h”
int mn()
{
SQLHENV henv= NULL;
SQLHDBC hdbc= NULL;
SQLRETURN ret;
//分配空间,准备连接
ret= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//配置连接参数
ret= SQLConnect(hdbc, (SQLCHAR*)”ODBCName”, SQL_NTS,
(SQLCHAR*)”userName”, SQL_NTS,
(SQLCHAR*)”password”, SQL_NTS);
if (!SQL_SUCCEEDED(ret))
{
printf(“连接失败!\n”);
}
else
{
printf(“连接成功!\n”);
//退出连接
SQLDisconnect(hdbc);
}
//释放刚刚分配的空间
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
通过以上程序,我们可以看到连接成功时,控制台中将输出“连接成功!”的提示信息。可以看到,SQL Server数据库已经成功连接。
二、SQL Server数据库中数据的增删改查
在C语言中,通过ODBC API可以方便地查询SQL Server数据库中的数据,执行增删改查操作十分容易。接下来,我们将分别介绍SQL Server数据库中数据的增删改查。
2.1 数据的插入
通过编写相应的C语言程序,可以轻松地对SQL Server表进行数据的插入。具体代码实现如下:
#include “stdio.h”
#include “sql.h”
#include “sqlext.h”
int mn()
{
SQLHENV henv= NULL;
SQLHDBC hdbc= NULL;
SQLRETURN ret;
SQLHSTMT hstmt;
//分配空间,准备连接
ret= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
ret= SQLConnect(hdbc, (SQLCHAR*)”ODBCName”, SQL_NTS,
(SQLCHAR*)”userName”, SQL_NTS,
(SQLCHAR*)”password”, SQL_NTS);
//定义SQL语句
char sql[1024];
sprintf(sql, “INSERT INTO UserInfo (userName, password) VALUES (‘tom’, ‘123456’)”);
//执行SQL语句
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (!SQL_SUCCEEDED(SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS)))
{
printf(“预处理失败!\n”);
}
else if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
{
printf(“执行失败!\n”);
}
else
{
printf(“执行成功!\n”);
}
//释放句柄空间
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
//关闭数据库连接
SQLDisconnect(hdbc);
//释放刚刚分配的句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
在以上代码中,我们需要拼接SQL语句,以实现向表中插入数据。通过定义SQL语句,执行SQLPrepare预处理函数,再通过SQLExecute函数将SQL语句执行,就可以将数据成功插入到SQL Server表中。
2.2 数据的删除
实现数据删除的方法与插入基本相同。同样的,我们需要拼接SQL语句,通过预处理函数和执行函数实现将数据从数据库中删除。下面是相应的C语言程序代码:
#include “stdio.h”
#include “sql.h”
#include “sqlext.h”
int mn()
{
SQLHENV henv= NULL;
SQLHDBC hdbc= NULL;
SQLRETURN ret;
SQLHSTMT hstmt;
//分配空间,准备连接
ret= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
ret= SQLConnect(hdbc, (SQLCHAR*)”ODBCName”, SQL_NTS,
(SQLCHAR*)”userName”, SQL_NTS,
(SQLCHAR*)”password”, SQL_NTS);
//定义SQL语句
char sql[1024];
sprintf(sql, “DELETE FROM Table1 WHERE ID = %d”, 5);
//执行SQL语句
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (!SQL_SUCCEEDED(SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS)))
{
printf(“预处理失败!\n”);
}
else if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
{
printf(“执行失败!\n”);
}
else
{
printf(“执行成功!\n”);
}
//释放句柄空间
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
//关闭数据库连接
SQLDisconnect(hdbc);
//释放刚刚分配的句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
2.3 数据的修改
修改数据库表中的数据与增删相同,也需要通过执行SQL语句完成。这里也是通过预处理函数和执行函数实现,同时需要对应修改相应的SQL语句。下面是相应的程序代码:
#include “stdio.h”
#include “sql.h”
#include “sqlext.h”
int mn()
{
SQLHENV henv= NULL;
SQLHDBC hdbc= NULL;
SQLRETURN ret;
SQLHSTMT hstmt;
//分配空间,准备连接
ret= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
ret= SQLConnect(hdbc, (SQLCHAR*)”ODBCName”, SQL_NTS,
(SQLCHAR*)”userName”, SQL_NTS,
(SQLCHAR*)”password”, SQL_NTS);
//定义SQL语句
char sql[1024];
sprintf(sql, “UPDATE MyTable SET Age = %d WHERE ID = %d”, 28, 1);
//执行SQL语句
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (!SQL_SUCCEEDED(SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS)))
{
printf(“预处理失败!\n”);
}
else if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
{
printf(“执行失败!\n”);
}
else
{
printf(“执行成功!\n”);
}
//释放句柄空间
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
//关闭数据库连接
SQLDisconnect(hdbc);
//释放刚刚分配的句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
2.4 数据的查询
C语言通过ODBC API实现查询SQL Server数据库的数据,同样需要拼接SQL语句,通过预处理函数和执行函数实现查询。下面是相应的程序代码:
#include “stdio.h”
#include “sql.h”
#include “sqlext.h”
int mn()
{
SQLHENV henv= NULL;
SQLHDBC hdbc= NULL;
SQLRETURN ret;
SQLHSTMT hstmt;
SQLCHAR userName[1024];
SQLCHAR password[1024];
//分配空间,准备连接
ret= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret= SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret= SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//连接数据库
ret= SQLConnect(hdbc, (SQLCHAR*)”ODBCName”, SQL_NTS,
(SQLCHAR*)”userName”, SQL_NTS,
(SQLCHAR*)”password”, SQL_NTS);
//定义SQL语句
char sql[1024];
sprintf(sql, “SELECT * FROM UserInfo”);
//执行SQL语句
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (!SQL_SUCCEEDED(SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS)))
{
printf(“预处理失败!\n”);
}
else if (!SQL_SUCCEEDED(SQLExecute(hstmt)))
{
printf(“执行失败!\n”);
}
else
{
//获取每条记录中字段的值
while (SQL_SUCCEEDED(SQLFetch(hstmt)))
{
SQLGetData(hstmt, 1, SQL_C_CHAR, userName, 1024, NULL);
SQLGetData(hstmt, 2, SQL_C_CHAR, password, 1024, NULL);
printf(“用户名:%s\t密码:%s\n”, userName, password);
}
}
//释放句柄空间
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
//关闭数据库连接
SQLDisconnect(hdbc);
//释放刚刚分配的句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
通过以上程序,我们可以查询SQL Server表中的数据,并将结果输出到控制台。
通过本文的介绍,我们了解了通过C语言操作SQL Server数据库的实例操作。在进行数据库操作时,需要先连接数据库,然后通过拼接SQL语句,通过预处理函数和执行函数实现数据的增删改查等操作。通过这些坚实的基础,能更加高效地管理公司中的数据资源。