c++ ado 调用存储过程并得到输出参数和返回值

简介:
// AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "adoEOF") rename("BOF", "adoBOF")
using namespace ADODB;

int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitialize(NULL);   
    _ConnectionPtr m_pConnection=NULL;  
    
    m_pConnection.CreateInstance(__uuidof(Connection));  

  
      
    _bstr_t strConnect = "Provider=SQLOLEDB.1;Password=1111111;Persist Security Info=True; \
                         User ID=sa;Initial Catalog=SoftwareVerification;Data Source=112.74.105.204"; 
    

    //下面代码执行一个查询
    /*
    try
    {
        _RecordsetPtr m_pRecordset=NULL;  
     m_pRecordset.CreateInstance(__uuidof(Recordset));
        m_pConnection->Open(strConnect,"","",adModeUnknown);
        _variant_t vAffected;
        _bstr_t bstrSql("select user_name,user_password from userssss");
        m_pRecordset = m_pConnection->Execute(bstrSql,&vAffected,adCmdText);
        while(!m_pRecordset->adoBOF)
        {
            _variant_t UserName = m_pRecordset->GetCollect(_variant_t((long)0));
            _variant_t PassWord = m_pRecordset->GetCollect("user_password");
            if(UserName.vt != NULL)
            {
                cout<<(LPCSTR)(_bstr_t)UserName<<"   "<<(LPCSTR)(_bstr_t)PassWord<<endl;
            }
            m_pRecordset->MoveNext();
        }
        m_pRecordset->Close();
        m_pConnection->Close();
    }
    catch(_com_error e)
    {
        wcout<<e.Description()<<endl;
    }
    */

    //调用存储过程
        try
    {
        m_pConnection->Open(strConnect,"","",adModeUnknown);
        _CommandPtr cmmd;
        HRESULT hr = cmmd.CreateInstance(__uuidof(Command));

        cmmd->Parameters->Append(cmmd->CreateParameter(_bstr_t("Return"),adInteger,adParamReturnValue,4));
        cmmd->Parameters->Append(cmmd->CreateParameter(_bstr_t("strUserName"),adVarChar,adParamInput,50,"zds"));
        cmmd->Parameters->Append(cmmd->CreateParameter(_bstr_t("strPassWord"),adVarChar,adParamInput,50,"111"));
        cmmd->Parameters->Append(cmmd->CreateParameter(_bstr_t("nSoftWareID"),adInteger,adParamInput,4,"1"));
        cmmd->Parameters->Append(cmmd->CreateParameter(_bstr_t("strMsg"),adVarChar,adParamOutput,50));
        

        cmmd->CommandText = _bstr_t("UserLogin");
        cmmd->ActiveConnection = m_pConnection;
        cmmd->CommandType = adCmdStoredProc;
        cmmd->Execute(NULL,NULL,adCmdStoredProc);
        string strRet = (const char*)(_bstr_t)cmmd->Parameters->GetItem("strMsg")->GetValue();
        int nRet = cmmd->Parameters->GetItem("Return")->GetValue();
        cout<<strRet<<endl;
    }
    catch(_com_error e)
    {
        wcout<<e.Description()<<endl;
    }

    ::CoUninitialize();
    return 0;
}
复制代码
相关文章
|
18天前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
32 4
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
64 6
|
2月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
84 2
|
3月前
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
46 0
|
5月前
|
算法 编译器 程序员
C++为什么有参数依赖查找(ADL)?
为什么在限定名称查找和非限定名称查找之外,C++还要提供参数依赖查找这样的机制呢?它其实是在规范的查找框架下,提供了一种灵活性的补充
|
5月前
|
编译器 C++ 容器
C++一分钟之-可变模板参数与模板模板参数
【7月更文挑战第21天】C++的模板实现泛型编程,C++11引入可变模板参数和模板模板参数增强其功能。可变模板参数(如`print`函数)用于处理任意数量的参数,需注意展开参数包和递归调用时的处理。模板模板参数(如`printContainer`函数)允许将模板作为参数,需确保模板参数匹配和默认值兼容。这些特性增加灵活性,但正确使用是关键。
61 4
|
6月前
|
编译器 C++ 开发者
C++一分钟之-返回值优化与Move Semantics
【6月更文挑战第19天】C++的RVO与移动语义提升效率,减少对象复制。RVO是编译器优化,避免临时对象的创建。移动语义通过右值引用和`std::move`转移资源所有权。注意RVO不是总有效,不应过度依赖。使用移动语义时,避免误用`std::move`导致对象无效。示例展示了RVO和移动构造函数的应用。理解并恰当使用这些机制能写出更高效代码。
68 3
|
6月前
|
C++
C++函数的默认参数、占位符、重载
C++函数的默认参数、占位符、重载
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
392 0