
用到的函数都比较容易理解,我就没多加说明了,如果有不理解的复制函数名百度一下,会有详细的说明的。大概的流程就是这样了~
//包含头文件
#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() 就是字符串形式了,建议各个之间用,和-进行标识
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)