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++开发、数据库、三维建模领域,请多多赐教!

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

  • 相关阅读:
    python模块--time模块
    python模块--如何相互调用自己写的模块
    Animating Views Using Scenes and Transitions
    fragment 切换
    android textview 设置text 字体
    android intent 5.1
    android EditView ime
    animation of android (4)
    animation of android (3)
    animation of android (2)
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14748967.html
Copyright © 2011-2022 走看看