当前位置:   article > 正文

数据库--数据提取:ODBC源_数据提取:从数据源中提取原始数据。该系统通过与不同数据源的连接,如数据库、文件

数据提取:从数据源中提取原始数据。该系统通过与不同数据源的连接,如数据库、文件

转自: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 
版权声明:本文为博主原创文章,转载请附上博文链接!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/396557
推荐阅读
相关标签
  

闽ICP备14008679号