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

求助大牛!C++编程,如何查询数据库中多条记录的多个字段值,并且返回到一个数据块中...急急急!,第1张

额。。写个个简单的样列,用的是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

}

C语言可以通过两种方法读取CVS或TEXT中的多列数据的某一列

一是用scanf,像你的数据可以定义两个变量,第一个是double

x,第二个为char

s[20]

当然,你可以用结构体,读文件用

fscanf("%lf%s",&x,s)

//这样就可以将第一列读入x,第二列读入s

另一方法,是直读入一行,然后将它分隔到各列中,而分隔方法就多了,可以用sscanf,也可以用strtok,也可以自己写程序逐个字符处理

//比如查询的是一个list对象,对象为User

//循环这个list,使用StringBuilder累加,代码如下:

    StringBuilder sbl = new StringBuilder()

    for(Iterator<User> it = list.iterator() it.hashNext()){

        User user = it.next()

        sbl.append(user.getName())

    }

    //这里最后返回:sbl.toString() 就是字符串形式了,建议各个之间用,和-进行标识


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6846512.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-29
下一篇2023-03-29

发表评论

登录后才能评论

评论列表(0条)

    保存