一、引用
#import "msado15.dll" no_namespace rename("EOF", "adoEOF") //相对路径的
//#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF") //绝对路径的
二、始化Com库(下面两种都可以)
AfxOleInit(); //add by jiao
//::CoInitialize(NULL);///初始化COM库
三、创建链接
_ConnectionPtr m_pConnection;
HRESULT hr;
try
{
//ADODB.Connection __uuidof(Connection)
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Driver={SQL Server};Server=172.16.45.10;Database=dd;UID=dd;PWD=dd","","",adModeUnknown);
AfxMessageBox("OK");
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
四、存储过程的调用
_CommandPtr m_pCommand;//还是智能指针
m_pCommand.CreateInstance("ADODB.Command");//实例
m_pCommand->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
m_pCommand->ActiveConnection = m_pConnection;//设置连接,别忘了啊
m_pCommand->CommandText = "Test";//存储过程为Test
_ParameterPtr m_pParam;
m_pParam.CreateInstance("ADODB.Parameter");
_ParameterPtr m_pParamRet;
m_pParamRet.CreateInstance("ADODB.Parameter");
CString strTmp;
strTmp.Format("%s","jiao");
_variant_t var = (LPCTSTR)strTmp;//转换为_variant_t
m_pParam = m_pCommand->CreateParameter("Name",adVarChar,adParamInput,20,var);
//m_pParam = m_pCommand->CreateParameter("Name",adVarChar,adParamInput,20,(_variant_t)"DengKanjiao");//adVarChar对应VarChar,adParamInput表明输入参数
m_pCommand->Parameters->Append(m_pParam);//加入到Command对象的参数集属性中
//m_pParamRet=m_pCommand->CreateParameter("ret",adChar,adParamOutput,1); //adChar对应char
m_pParamRet=m_pCommand->CreateParameter("ret",adInteger,adParamOutput,1);//adInteger对应int ,adParamOutput表明输出参数
m_pCommand->Parameters->Append(m_pParamRet);
m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
// _variant_t result = m_pCommand->Parameters->GetItem("ret")->GetValue();
int m_nNewNetID=(long)m_pCommand->Parameters->GetItem(_bstr_t("ret"))->GetValue();// 获取返回值
m_pConnection->Close();
CoUninitialize();
AfxMessageBox("Success");
五、存储的SQL语句
CREATE PROCEDURE Test
@Name varchar(20),
@ret int output
AS
declare @nCallTimeLen as int
set @nCallTimeLen=20000
insert into UserInfo values(@Name)
if @@error=0
set @nCallTimeLen=300
else
set @nCallTimeLen=200
set @ret=@nCallTimeLen
return @ret
go