问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...C++编程,如何查询数据库中多条记录的多个字段值,并且返回到一个数据...

发布网友 发布时间:2024-10-19 21:55

我来回答

4个回答

热心网友 时间:2024-12-02 06:57

额。。写个个简单的样列,用的是ODBC,比较直接。使用ADO的话虽然代码少,但是看起来不是很好理解。你可以自己去百度学学~
用到的函数都比较容易理解,我就没多加说明了,如果有不理解的复制函数名百度一下,会有详细的说明的。大概的流程就是这样了~

//包含头文件
#include "windows.h"
#include "sqlext.h"
#pragma comment(lib,"odbc32.lib")

int main(int argc, char* argv[]){
//1.连接数据源(前提是你已经配置好了数据源,我用的sqlserver数据库,怎么配数据源百度一下~很简单的)
//分配环境句柄, 保存一些驱动程序的信息
SQLHENV henv;//环境句柄
SQLRETURN sqlRet;
sqlRet = SQLAllocEnv(&henv);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("分配环境句柄失败!\n");
return -1;
}
//分配连接句柄
SQLHDBC hdbc;//连接句柄
sqlRet = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("分配连接句柄失败!\n");
return -1;
}
//连接数据源(test是数据库名字,sa 和sa 是用户们和密码,你替换即可)
sqlRet = SQLConnect(hdbc,(SQLCHAR*)"test",strlen("test"),(SQLCHAR*)"sa",2,(SQLCHAR*)"sa",2);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("连接数据源失败!\n");
return -1;
}

//2.执行SQL语句
//准备语句句柄
SQLHSTMT hstmt;
sqlRet = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("连接语句句柄失败!\n");
return -1;
}
//设置游标类型(参看:http://blog.csdn.net/bichenggui/article/details/5601381)
sqlRet = SQLSetStmtOption(hstmt,SQL_ATTR_CURSOR_TYPE,SQL_CURSOR_KEYSET_DRIVEN);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("设置光标类型失败!\n");
return -1;
}
//执行SQL语句
//直接执行(你替换成你自己的sqlserver语句即可)
sqlRet = SQLExecDirect(hstmt,(SQLCHAR*)"insert into student values('lsk',21)",SQL_NTS);
if (sqlRet != SQL_SUCCESS && sqlRet != SQL_SUCCESS_WITH_INFO)
{
printf("执行SQL语句失败!\n");
return -1;
}

//获取结果集
SQLCHAR value[20]={0};
SQLINTEGER len = 0;

//移动光标(不移动前光标指向结果集第一列的前面)
SQLFetch(hstmt);
//取值(取的是结果集的第一列的值),第二个参数表示取第几列
SQLGetData(hstmt,1,SQL_C_CHAR,value,20,&len);
printf("结果为:%s\n",value);
//假如结果集有多行则再次移动光标即可
SQLFetch(hstmt);
//然后再次取值
SQLGetData(hstmt,1,SQL_C_CHAR,value,20,&len);

//关闭句柄,释放资源
SQLFreeHandle(SQL_HANDLE_STMT, hstmt); //释放语句句柄
SQLDisconnect(hdbc); //断开连接
SQLFreeHandle(SQL_HANDLE_DBC, hdbc); //释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv); //释放环境句柄
return 0;
}

热心网友 时间:2024-12-02 06:59

你是说要将多个字段同时放到同一个数据块?
如果这样的话那你应该会定义一个结构体数组来存储这些数据,每条记录中的多个字段存到结构体数组的一个元素。
你可以看一下otl的用法,你这只是简单的从数据块select数据而已,就是读取一条记录存放到结构体,然后循环,因为你select出来的多个字段是一个数据流,你在解析这个数据流就能得到每个字段的值。最后就得到了一个存放你所需数据的结构体。
ps:简单点儿的话你也可以每次只select一个字段,多写几个就ok。比如:
for(要读取的条数)
{
select 字段1from table where ...
select字段2 from table where...
}

热心网友 时间:2024-12-02 06:56

定义结构体,fetch了之后使用内存拷贝

热心网友 时间:2024-12-02 06:53

如果你只是想解决这个问题的话, 直接在数据库中就可以解决完后输出的,不需要输出后用C++代码来操作吧?

SQL功能强大的很
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
有没有什么软件可以加到微信支付付款人? 有啥相亲软件聊天付费可以用微信支付的 昌南地铁线设哪些站 在北七定镇怎么去八达岭长城 北七家离南邵地铁站有多远 老人餐具消毒用什么材质的锅好 消毒餐具用什么材质 北京哪有夜校 北邮3G北邮3G课程 移动云计算工信部移动云计算教育培训中心 昌邑海边哪里好玩,昌邑周边旅游一日游景点 ...就是条件不同的2个sql,如何拼成一个sql显示出来啊 果树环割和控梢可以同时进行吗? 去澳大利亚留学读本科,如何拿绿卡? 去澳大利亚留学怎样取得绿卡? 我在淘宝网里注册了一个淘宝店,实名质的,如果不用了有什么后果呢,怎么... 我在淘宝网买了东西,但还没付款。我现在不想要了,请问如何撤销交易? 求救 电脑小白历尽千辛万苦自己组装了一台电脑 开机就显示这个 跟网上... 凹面镜可以聚光那为什么晶状体变凸才可以看近物? 考科目4多少题? ...ipad今天打开自己升级到了ios7 打开就要锁屏密码 自己没设置阿怎么办... ipad更新后莫名多出来以前没设置过的密码 ...后还需要参加积极分子培训吗,我都有党校毕业证书了 ...怎么办?我在本科的是上过党课,但是没入成,现在研究生阶段入党要求... 貂绒毛线加伴侣线织出来的毛衣保暖性是不是不如只用貂绒毛线好? 织貂绒毛衣必须要加伴侣线吗? 高校毕业生档案是什么? 为什么发票查询不到发票 正常发票为什么查询不出来 为什么发票查验不到 昌邑有什么好玩的_潍坊昌邑哪里好玩 昌邑必去十大景点 星学院第二季谁是女主角 (希望是美星T^T) 牙科咨询师话术技巧 种植牙咨询话术案例分享 动荡青春心电子书txt全集下载 ...g+克拉霉素是目前使用最广泛的一种三联疗法. 但我阿莫西林过敏,请问用... 在京东商城攒了台电脑.11月3号下的订单..8天了..毛都没见到..去查快递... 有关失眠经典心情说说唯美语录的短句(失眠经典心情说说唯美语录——沉... 亭亭玉立近义词有哪些 给词语找相对或相似的朋友 亭亭玉立猜数字几 女人大姨妈迟迟不来怎么回事 就是大姨妈来的前几天房事了 然后月底本来应该来姨妈的…可是还没来... 大姨妈迟迟不来什么原因 我准备在京东网攒机,直接使用网银支付安全吗,现在支付宝不支持了 不服来单挑《西游萌萌》1V1最强英雄会是谁 塔人西游萌萌觉醒英雄强势组队 西游萌萌绚丽技能,体验轰杀全屏的快感 《西游萌萌》最强战力 谁是你手下的NO.1