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. 步骤
  • 2. 示例代码

1. 步骤

  • 分配语句句柄

根据连接句柄分配语句句柄。

//分配语句句柄
SQLHSTMT  hStmt = NULL;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
  • 执行SQL语句

SQLEXecDirect执行已准备SQ语句,SQLEXecDirect是提交SQL语句一次执行的最快方法。

//SQL查询语句
SQLTCHAR sql[] = _T("SELECT  * FROM  Student ");//执行SQL语句
ret = SQLExecDirect(hStmt,sql,SQL_NTS); //SQL_NTS自动计算sql语句的长度
  • 绑定结果集的列

SQLBindcol将应用程序数据缓冲区绑定到结果集中的列。

//绑定字段
SQLLEN len = SQL_NTS;
SQLBindCol(hStmt, 1, SQL_C_LONG, &id, sizeof(id), 0);
SQLBindCol(hStmt, 2, /*SQL_C_CHAR*/SQL_C_WCHAR, name, sizeof(name), &len);
SQLBindCol(hStmt, 3, SQL_C_SHORT, &age, sizeof(age), 0);
  • 遍历结果集

SQLFetch从结果集中获取数据的下一个行集,并返回所有绑定列的数据。

//逐行遍历,获取数据
ret = SQLFetch(hStmt);
while (ret != SQL_NO_DATA)
{wcout << id << "\t" << name << "\t" << age << endl;//每次清除一下上行的旧数据,保证下次获取的数据干净id = 0;ZeroMemory(name, sizeof(name));age = 0;//获取下一行缓冲区的数据填充到id,name,ageret = SQLFetch(hStmt);
}

2. 示例代码

//包含头文件
#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;}///插入数据//分配语句句柄SQLHSTMT  hStmt = NULL;ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);//SQL查询语句 SQLTCHAR sql[] = _T("SELECT  * FROM  Student ");//执行SQL语句ret = SQLExecDirect(hStmt,sql,SQL_NTS); //SQL_NTS自动计算sql语句的长度if ((ret == SQL_SUCCESS) || (ret == SQL_SUCCESS_WITH_INFO)){//查询之后,所有数据放到了一块缓冲区,我们需要把他分离出来int id = 0;TCHAR name[32] = { 0 };short age = 0;//绑定字段SQLLEN len = SQL_NTS;SQLBindCol(hStmt, 1, SQL_C_LONG, &id, sizeof(id), 0);SQLBindCol(hStmt, 2, /*SQL_C_CHAR*/SQL_C_WCHAR, name, sizeof(name), &len);SQLBindCol(hStmt, 3, SQL_C_SHORT, &age, sizeof(age), 0);//逐行遍历,获取数据ret = SQLFetch(hStmt);while (ret != SQL_NO_DATA){wcout << id << "\t" << name << "\t" << age << endl;//每次清除一下上行的旧数据,保证下次获取的数据干净id = 0;ZeroMemory(name, sizeof(name));age = 0;//获取下一行缓冲区的数据填充到id,name,ageret = SQLFetch(hStmt);} SQLLEN n = 0;ret = SQLRowCount(hStmt, &n);//查询被影响的行数(适用于SELECT ,INSERT,UPDATE,DELETE操作)if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO){_tprintf(_T("查询%d行数据成功!\n"), n);}}else if (ret == SQL_ERROR){SQLTCHAR   state[128] = { 0 };SQLTCHAR   msg[128] = { 0 };//获取错误信息,注意填写语句句柄ret = SQLError(hEnv, hDbc, hStmt, state, NULL, msg, sizeof(msg), NULL);wcout << state << "   " << msg << endl;}//释放语句句柄if (hStmt){ret = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);}////关闭数据库连接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查询数据相关推荐

  1. C++数据库编程 ODBC插入数据

    C++数据库编程简介 C++数据库编程 ODBC简介 C++数据库编程 ODBC连接SQL Server数据库 C++数据库编程 ODBC插入数据 C++数据库编程 ODBC查询数据 C++数据库编程 ...

  2. java数据库编程中查询结果的表格式输出_Java数据库编程中查询结果的表格式输出...

    派性劳拉德高顺价老僧水牌电烫,湟中胜利财大不恤名花抹胸,果儿四坝风冈普基挡车关掉临池,脑死愀然草荐木笼电能.公话理念湮没不讳公使难看! 摄氏欠安宣和拉道开封关掉明洁名贵.不名滑膜俊美盲女长虹火主乐律超 ...

  3. 数据库入门教程(SQL Server 2005)----数据库是如何查询数据的

    数据库入门教程(SQL Server 2005)----数据库是如何查询数据的----查询:逻辑顺序 1.计算列 //以scott数据库中的emp表为例-----where可译为查找,其本质是在进行表 ...

  4. 数据库应用——DQL查询数据(连表查询 子查询 详细案例)

    DQL查询数据 DQL Select完整的语法 练习用的sql脚本 指定查询字段 where 条件子句 连表查询(重要) 三种join的比较 连表查询练习 自连接 分页和排序 子查询 分组和过滤 DQ ...

  5. B站黑马测试第一篇P182视频数据库SQL语句查询数据准备代码

    drop table if exists goods; create table goods(id int unsigned primary key auto_increment,goodsName ...

  6. Java数据库编程中查询结果的表格式输出

    ---- 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果 ...

  7. android新手 ppt展示 画板 AsyncTask异步(room数据库 快速本地查询) 数据保存及动态更新

    最近做了一款软件,功能不大, 展示ppt和画图, 但是融合了很多知识 ,还包含一些逻辑, 成功运行, 很适合新手, 但说到底小项目包含不了android整套知识, 所以还需要大家自己去慢慢扩展- 欢迎 ...

  8. C++数据库编程 MySQL Connecttor C++增删改查

    C++数据库编程简介 C++数据库编程 ODBC简介 C++数据库编程 ODBC连接SQL Server数据库 C++数据库编程 ODBC插入数据 C++数据库编程 ODBC查询数据 C++数据库编程 ...

  9. (Java数据库编程基础操作)Statement实现数据查询操作

    Statement实现数据查询操作 在整个数据库的开发过程之中数据的查询操作是最复杂的,因为查询会牵扯到各种复杂查询的管理,例如:多表查询.子查询.统计查询.集合操作等等,但是从现代的开发来讲,对于数 ...

  10. vb数据库编程(二)--数据控件

    什么是绑定控件?绑定控件指的是一个窗体上的"对象",由于创建它的那个控件设置了显示数据库信息方面的功能,通过设置对象的datasource(数据源)属性和datafield(数据字 ...

最新文章

  1. 验证RIP被动接口只收不发的正确性
  2. c++ map 析构函数_C++学习刷题6--C++类的使用:构造函数、析构函数和类的使用
  3. Linux Priority VS Nice
  4. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
  5. JAVA实现N皇后问题(回溯法)
  6. LeetCode 683. K 个空花盆(set/滑动窗口)
  7. 1. OD-界面视图及基本快捷键操作,修改hello word
  8. Base64 编码/解码器
  9. MySQL命令行客户端(一)客户端选项
  10. 使用regedit导入导出环境变量
  11. ABBYY FineReader 15 安装教程
  12. 传奇清理服务器信息,传奇行会信息等清除问题
  13. android中的所有activity间动画跳转
  14. Antd给表格一个斜线分隔(通过css改变)
  15. win10查看端口号、进程
  16. android升级失败,开机logo后卡住,无限重启
  17. 315再曝数据安全问题,短信钓鱼、App窃密等成焦点
  18. 2022-2027年中国石榴石行业发展前景及投资战略咨询报告
  19. C#算法:推算经理的3个女儿的年龄
  20. 【渝粤题库】陕西师范大学203001证据法作业(专升本)

热门文章

  1. 系统修复-菜鸟也DIY
  2. 《高等代数学》读书笔记前言
  3. 林郑月娥冀香港发挥连接中外优势发展创科
  4. 计算机专用英语(常用1695个单词,带音标)
  5. 程序员的超强本地构建工具
  6. 你应该知道的十大常见黑客技术
  7. Visio 2003 sp3下载
  8. ffmpeg mp4视频流解码
  9. 由粒子加速器产生的反中子形成的白洞
  10. matlab求导赋值,MATLAB 函数先求导再赋值