zoukankan      html  css  js  c++  java
  • C++ADO读写SqlServer函数封装

    因为是ADO连接,所以对SqlServer的版本是通用的,增删改查,加到项目里直接就可以用

    hpp

    #include <Windows.h>
    #include <string>
    #include <iostream>
    #include <sstream>
    #include <list>
    #include <algorithm>
    #include <afxinet.h>
    #include <afxwin.h>
    #include <io.h>
    #include <stdio.h>
    #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","EndOfFile")
    
    using namespace std;
    
    struct param_struct
    {
        string param_name;
        string param_value;
    };
    typedef list<param_struct> LISTSTR;
    
    
    
        /**
        * @brief 连接数据库
        * @param[in] connect_str  ip地址,数据库名,用户,密码
        * @return void
        */
        _ConnectionPtr connect_database(CString connect_str);
    
    
        /**
        * @brief 执行sql语句
        * @param[in] sql_str  sql语句
        * @param[in] connect_str  ip地址,数据库名,用户,密码
        * @return void
        */
        void execute_sql(CString sql_str,CString connect_str);
    
    
        /**
        * @brief 执行sql语句
        * @param[in] sql_str  sql语句
        * @param[in] connect_str  ip地址,数据库名,用户,密码
        * @return void
        */
        LISTSTR select_data(CString sql_str,CString connect_str);

    cpp

    //------------------------------------------------------------------------------
    // 连接数据库
    //------------------------------------------------------------------------------
    _ConnectionPtr CEdgeArtCreateDBTableDlg::connect_database(CString connect_str)
    {
        ::CoInitialize(NULL);//初始化OLE/COM库环境,为访问ADO接口做准备
        _ConnectionPtr m_pConnection("ADODB.Connection");    
        m_pConnection.CreateInstance("ADODB.Connection");
        _bstr_t strConnect=connect_str;
        m_pConnection->Open(strConnect,"","",adModeUnknown);
        if (m_pConnection==NULL)
        {
            cerr<<"Lind data ERROR!
    ";
        }
        return m_pConnection;
    }
    
    
    //------------------------------------------------------------------------------
    // 执行sql语句
    //------------------------------------------------------------------------------
    void CEdgeArtCreateDBTableDlg::execute_sql(CString sql_str,CString connect_str)
    {
        _ConnectionPtr m_pConnection("ADODB.Connection");
        _RecordsetPtr m_pRecordset("ADODB.Recordset");
        m_pConnection = connect_database(connect_str);
    
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        _bstr_t bstrSQL(sql_str);
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
        //m_pRecordset->Close();
    }
    
    
    //------------------------------------------------------------------------------
    // 查询sql语句
    //------------------------------------------------------------------------------
    LISTSTR CEdgeArtCreateDBTableDlg::select_data(CString sql_str,CString connect_str)
    {
        _ConnectionPtr m_pConnection("ADODB.Connection");
        _RecordsetPtr m_pRecordset("ADODB.Recordset");
        m_pConnection = connect_database(connect_str);
    
        LISTSTR data_list;
        m_pRecordset.CreateInstance(_uuidof(Recordset));
        _bstr_t bstrSQL(sql_str);
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    
    
        int param_count = m_pRecordset->GetFields()->Count;
        param_struct params;
    
        while (!m_pRecordset->EndOfFile)
        {
            for(int i=0;i<param_count;i++)
            {
                string code_name;
                _variant_t vt((long)i);
                params.param_name = m_pRecordset->GetFields()->Item[vt]->Name;
                _variant_t param_value_v;
                param_value_v = m_pRecordset->GetCollect(params.param_name.c_str());
                if(param_value_v.vt==VT_NULL)
                {
                    params.param_value="";
                }
                else
                {
                    params.param_value  = (char*)(_bstr_t)param_value_v;
                }
                data_list.push_back(params);
            }
            m_pRecordset->MoveNext();
        }
        m_pRecordset->Close();
        return data_list;
    }

    程序员阿飞

    2021年5月9日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:专注NX开发、VC++开发、数据库、三维建模领域,请多多赐教!

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可留言(博客文章底部留言)咨询.

  • 相关阅读:
    PHP的Tag标签
    PHP 常量
    MySQL知识点链接
    Codeforces Round #593 (Div. 2)D(螺旋形模拟)
    【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
    【PAT甲级】1059 Prime Factors (25 分)
    【PAT甲级】1058 A+B in Hogwarts (20 分)
    【PAT甲级】1057 Stack (30 分)(分块)
    【PAT甲级】1056 Mice and Rice (25 分)
    Atcoder Grand Contest 039C(容斥原理,计数DP)
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14748967.html
Copyright © 2011-2022 走看看