C++数据库编程 ODBC查询数据
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查询数据相关推荐
- C++数据库编程 ODBC插入数据
C++数据库编程简介 C++数据库编程 ODBC简介 C++数据库编程 ODBC连接SQL Server数据库 C++数据库编程 ODBC插入数据 C++数据库编程 ODBC查询数据 C++数据库编程 ...
- java数据库编程中查询结果的表格式输出_Java数据库编程中查询结果的表格式输出...
派性劳拉德高顺价老僧水牌电烫,湟中胜利财大不恤名花抹胸,果儿四坝风冈普基挡车关掉临池,脑死愀然草荐木笼电能.公话理念湮没不讳公使难看! 摄氏欠安宣和拉道开封关掉明洁名贵.不名滑膜俊美盲女长虹火主乐律超 ...
- 数据库入门教程(SQL Server 2005)----数据库是如何查询数据的
数据库入门教程(SQL Server 2005)----数据库是如何查询数据的----查询:逻辑顺序 1.计算列 //以scott数据库中的emp表为例-----where可译为查找,其本质是在进行表 ...
- 数据库应用——DQL查询数据(连表查询 子查询 详细案例)
DQL查询数据 DQL Select完整的语法 练习用的sql脚本 指定查询字段 where 条件子句 连表查询(重要) 三种join的比较 连表查询练习 自连接 分页和排序 子查询 分组和过滤 DQ ...
- B站黑马测试第一篇P182视频数据库SQL语句查询数据准备代码
drop table if exists goods; create table goods(id int unsigned primary key auto_increment,goodsName ...
- Java数据库编程中查询结果的表格式输出
---- 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果.由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi.VB那样方便地把查询结果 ...
- android新手 ppt展示 画板 AsyncTask异步(room数据库 快速本地查询) 数据保存及动态更新
最近做了一款软件,功能不大, 展示ppt和画图, 但是融合了很多知识 ,还包含一些逻辑, 成功运行, 很适合新手, 但说到底小项目包含不了android整套知识, 所以还需要大家自己去慢慢扩展- 欢迎 ...
- C++数据库编程 MySQL Connecttor C++增删改查
C++数据库编程简介 C++数据库编程 ODBC简介 C++数据库编程 ODBC连接SQL Server数据库 C++数据库编程 ODBC插入数据 C++数据库编程 ODBC查询数据 C++数据库编程 ...
- (Java数据库编程基础操作)Statement实现数据查询操作
Statement实现数据查询操作 在整个数据库的开发过程之中数据的查询操作是最复杂的,因为查询会牵扯到各种复杂查询的管理,例如:多表查询.子查询.统计查询.集合操作等等,但是从现代的开发来讲,对于数 ...
- vb数据库编程(二)--数据控件
什么是绑定控件?绑定控件指的是一个窗体上的"对象",由于创建它的那个控件设置了显示数据库信息方面的功能,通过设置对象的datasource(数据源)属性和datafield(数据字 ...
最新文章
- 验证RIP被动接口只收不发的正确性
- c++ map 析构函数_C++学习刷题6--C++类的使用:构造函数、析构函数和类的使用
- Linux Priority VS Nice
- JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
- JAVA实现N皇后问题(回溯法)
- LeetCode 683. K 个空花盆(set/滑动窗口)
- 1. OD-界面视图及基本快捷键操作,修改hello word
- Base64 编码/解码器
- MySQL命令行客户端(一)客户端选项
- 使用regedit导入导出环境变量
- ABBYY FineReader 15 安装教程
- 传奇清理服务器信息,传奇行会信息等清除问题
- android中的所有activity间动画跳转
- Antd给表格一个斜线分隔(通过css改变)
- win10查看端口号、进程
- android升级失败,开机logo后卡住,无限重启
- 315再曝数据安全问题,短信钓鱼、App窃密等成焦点
- 2022-2027年中国石榴石行业发展前景及投资战略咨询报告
- C#算法:推算经理的3个女儿的年龄
- 【渝粤题库】陕西师范大学203001证据法作业(专升本)