C++数据库编程简介
C++数据库编程 ODBC简介
C++数据库编程 ODBC连接SQL Server数据库
C++数据库编程 ODBC插入数据
C++数据库编程 ODBC查询数据
C++数据库编程 ODBC删除数据
C++数据库编程 ODBC修改数据
C++数据库编程 ODBC连接MySQL增删改查数据
C++数据库编程 MySQL Connecttor C++简介
C++数据库编程 MySQL Connecttor C++增删改查
文章目录
- 1. ODBC编程一般步骤
- 2. 连接步骤
- 3. 代码示例
1. ODBC编程一般步骤
- 配置数据源
- 初始化环境
- 拼接SQL语句
- 执行SQL语句遍历结果集
- 释放ODBC连接
官方文档:Microsoft 开放式数据库连接 (ODBC) - SQL Server | Microsoft Docs
2. 连接步骤
- 头文件
需要包含以下头文件
#include<Windows.h>
#include <sql.h>
#include <sqlext.h>
#include<sqltypes.h>
- 分配环境句柄
连接到数据源的第一步是加载驱动程序管理器并使用 SQLAllocHandle分配环境句柄。
SQLHENV hEnv = NULL;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if (SQL_SUCCESS == ret)
{
wcout << _T("环境句柄分配成功!") << endl;
}
else
{
return -1;
}
- 设置环境属性
应用程序通过使用 SQL_ATTR_APP_ODBC_VER环境属性调用SQLSetEnVAttr:注册其符合的ODBC版本。
ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
- 分配连接句柄
应用程序可以连接到数据源或驱动程序之前,它必须分配一个连接句柄。
SQLHDBC hDbc = NULL;
ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
- 连接数据库
分配环境和连接句柄并设置所有连接属性后,应用程序即可连接到数据源或驱动程序。
//根据DSN ,连接数据库
ret = SQLConnect(hDbc, (SQLTCHAR*)_T("SQLServerODBC"), SQL_NTS, (SQLTCHAR*)_T("sa"), SQL_NTS, (SQLTCHAR*)_T("Sa123"), SQL_NTS);
if ((ret == SQL_SUCCESS) || (ret == SQL_SUCCESS_WITH_INFO))
{
wcout << _T("数据库连接成功!")<<endl;
}
SQLConnect 函数 - SQL Server | Microsoft Docs
- 获取错误信息
SQLConnect 函数 - SQL Server | Microsoft Docs
else if (ret == SQL_ERROR)
{
SQLTCHAR state[128] = { 0 };
SQLTCHAR msg[128] = { 0 };
//获取错误信息
ret = SQLError(hEnv, hDbc, NULL, state, NULL, msg, sizeof(msg), NULL);
wcout << state <<" "<< msg << endl;
}
- 关闭数据库
//关闭数据库连接
ret = SQLDisconnect(hDbc);
if (ret == SQL_SUCCESS)
{
wcout << _T("关闭数据库连接成功!") << endl;
}
//释放连接句柄
if (hDbc)
{
ret = SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
}
//释放环境句柄
if (hEnv)
{
ret = SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
3. 代码示例
//包含头文件
#include<Windows.h>
#include <sql.h>
#include <sqlext.h>
#include<sqltypes.h>
#include <tchar.h>
#include <iostream>
using namespace std;
int main()
{
//设置为中文
_wsetlocale(LC_ALL, L"chs");
SQLRETURN ret = SQL_ERROR;
//分配ODBC环境句柄
SQLHENV hEnv = NULL;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if (SQL_SUCCESS == ret)
{
wcout << _T("环境句柄分配成功!") << endl;
}
else
{
return -1;
}
//设定ODBC的版本
ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
//分配数据库连接句柄
SQLHDBC hDbc = NULL;
ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
//根据DSN ,连接数据库
ret = SQLConnect(hDbc, (SQLTCHAR*)_T("SQLServerODBC"), SQL_NTS, (SQLTCHAR*)_T("sa"), SQL_NTS, (SQLTCHAR*)_T("Sa123"), SQL_NTS);
if ((ret == SQL_SUCCESS) || (ret == SQL_SUCCESS_WITH_INFO))
{
wcout << _T("数据库连接成功!")<<endl;
}
else if (ret == SQL_ERROR)
{
SQLTCHAR state[128] = { 0 };
SQLTCHAR msg[128] = { 0 };
//获取错误信息
ret = SQLError(hEnv, hDbc, NULL, state, NULL, msg, sizeof(msg), NULL);
wcout << state <<" "<< msg << endl;
}
//关闭数据库连接
ret = SQLDisconnect(hDbc);
if (ret == SQL_SUCCESS)
{
wcout << _T("关闭数据库连接成功!") << endl;
}
//释放连接句柄
if (hDbc)
{
ret = SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
}
//释放环境句柄
if (hEnv)
{
ret = SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
}
return 0;
}
更多推荐
C++数据库编程 ODBC连接SQL Server数据库
发布评论