赞
踩
转自:https://blog.csdn.net/yuqian123455/article/details/85926347
ODBC是一种标准,或则是一种封装,使得数据库有一种一致和清晰的工作方式。
1、如何在windows中创建ODBC源?创建SQL server 的数据源
控制面板,添加到系统DSN,命名数据源名,数据源描述,输入数据库名称,测试成功,即可以使用;
2、代码读取ODBC数据源
// ODBC.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include"windows.h"
#include"sql.h"
#include"sqlext.h"
#include"sqltypes.h"
#include<cstdlib>
#include<iostream>
using namespace std;
//---end
#pragma comment(lib, "odbc32.lib")
/**********************************
模 块:获取OBDC数据源数据
版 本:来自于MSDN
作 者:
创建日期:
功 能:
参 数:
返回值:
其 他:
*************************************************/
SQLCHAR file_context[102400000]={0};
void getDavieData()
{
SQLHENV serverhenv;
SQLHDBC serverhdbc;
SQLHSTMT serverhstmt = 0;
SQLRETURN ret;
SQLCHAR file_id[20]={0};
SQLCHAR file_type[20]={0} ;
//BLOB te_file;
//SQLCHAR te_file[1024]={0};
SQLINTEGER length;
SQLPOINTER rgbValue = NULL;
ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);// 分配环境句柄
ret = SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);//设置环境属性
if(!SQL_SUCCEEDED(ret))
{
cout<<"AllocEnvHandle error!"<<endl;
system("pause");
return;
}
ret = SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);//分配链接句柄
if(!SQL_SUCCEEDED(ret))
{
cout<<"AllocDbcHandle error!"<<endl;
system("pause");
return;
}
// Set login timeout to 5 seconds
ret = SQLSetConnectAttr(serverhdbc, SQL_LOGIN_TIMEOUT,SQLPOINTER(5), 0);
//数据库链接(serverhdbc, 数据库名称,SQL_NTS,用户名,密码,SQL_NTS)
ret = SQLConnect(serverhdbc,(SQLCHAR*)"XX数据库名",SQL_NTS,NULL,SQL_NTS,NULL,SQL_NTS);
if(!SQL_SUCCEEDED(ret))
{
SQLCHAR SQLState[10] ={0};
SQLINTEGER integer= 0 ;
SQLCHAR szText[200] ={0};
SQLSMALLINT nTxtLen = 0;
ret = SQLGetDiagRec(SQL_HANDLE_STMT, serverhstmt, 1, SQLState,&integer, szText,200,&nTxtLen);
system("pause");
}
ret = SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);//分配执行语句句柄
//ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"SELECT \"te_comp\",\"te_vstype\" FROM \"tbadmin\".\"tb_v
ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"SELECT \"file_id\",\"file_type\",\"file_context\" FROM \"表名\" --WHERE te_comp = '1734893'",SQL_NTS);//查询语句
if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindCol(serverhstmt,1, SQL_C_CHAR, (void*)file_id,sizeof(file_id), &length);//绑定数据
ret = SQLBindCol(serverhstmt,2, SQL_C_CHAR, (void*)file_type,sizeof(file_type), &length);
//ret = SQLBindCol(serverhstmt,3, SQL_C_BINARY, (void*)&te_file,sizeof(te_file), &length);
if(!SQL_SUCCEEDED(ret))
{
SQLCHAR SQLState[10] ={0};
SQLINTEGER integer= 0 ;
SQLCHAR szText[200] ={0};
SQLSMALLINT nTxtLen = 0;
ret = SQLGetDiagRec(SQL_HANDLE_STMT, serverhstmt, 1, SQLState,&integer, szText,200,&nTxtLen);
system("pause");
}
CreateDirectoryA("**文件名**", 0); //这文件名称
while(SQL_NO_DATA != SQLFetch(serverhstmt))//循环获取数据
{
ret = SQLGetData(serverhstmt,3, SQL_C_CHAR, (void*)file_context,sizeof(file_context), &length);//获取数据
char fName[20] = {0};
sprintf(fName, "**文件名**\\%s_%s", file_id,file_type);
FILE* fp = fopen(fName, "wb");
fwrite(file_context, strlen((char*)file_context), 1, fp);
fclose(fp);
if(!SQL_SUCCEEDED(ret))
{
SQLCHAR SQLState[10] ={0};
SQLINTEGER integer= 0 ;
SQLCHAR szText[200] ={0};
SQLSMALLINT nTxtLen = 0;
ret = SQLGetDiagRec(SQL_HANDLE_STMT, serverhstmt, 1, SQLState,&integer, szText,200,&nTxtLen);
system("pause");
}
cout<<"name:"<<file_id<<" ID:"<<file_type << "DATA: ";
cout<<endl;
}
}
//释放句柄
ret=SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
if(SQL_SUCCESS!=ret && SQL_SUCCESS_WITH_INFO != ret)
cout<<"free hstmt error!"<<endl;
//断开数据库链接
ret=SQLDisconnect(serverhdbc);
if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
cout<<"disconnected error!"<<endl;
//释放链接句柄
ret=SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
cout<<"free hdbc error!"<<endl;
//释放环境句柄
ret=SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
cout<<"free henv error!"<<endl;
system("pause");
}
---------------------
作者:eGanWo
来源:CSDN
原文:https://blog.csdn.net/yuqian123455/article/details/85926347
版权声明:本文为博主原创文章,转载请附上博文链接!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。