我是菜鸟,在学者弄ADO的存储过程,先是弄掉参数,然后学返回参数。数据库表 test
num varchar(10)
name varchar(10)
下面是我的存储过程
CREATE PROCEDURE test1
@na varchar(15),
@nu varchar(100) output as
select name from test where num = @nu代码
CoInitialize(NULL);
CString cvar1;
cvar1 = "ly";
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));pConn->ConnectionString = "Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=test";
pConn->Open("","","",adOpenUnspecified);
pCmd->ActiveConnection = pConn;
pCmd->CommandType = adCmdStoredProc;
pCmd->CommandText = _bstr_t("test1");
_ParameterPtr pam = NULL;
pam.CreateInstance(__uuidof(Parameter));
_variant_t vvar1;
vvar1=_variant_t(_bstr_t(cvar1));pam = pCmd->CreateParameter(_bstr_t("var1"),adVarChar,adParamInput,100,vvar1);
pCmd->Parameters->Append(pam);
pCmd->Execute(NULL, NULL, adCmdStoredProc);CoUninitialize();代码是执行到execute出错,报runtime错误。
菜鸟,不知道是我的数据类型还是那个地方出错了。
num varchar(10)
name varchar(10)
下面是我的存储过程
CREATE PROCEDURE test1
@na varchar(15),
@nu varchar(100) output as
select name from test where num = @nu代码
CoInitialize(NULL);
CString cvar1;
cvar1 = "ly";
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));pConn->ConnectionString = "Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=test";
pConn->Open("","","",adOpenUnspecified);
pCmd->ActiveConnection = pConn;
pCmd->CommandType = adCmdStoredProc;
pCmd->CommandText = _bstr_t("test1");
_ParameterPtr pam = NULL;
pam.CreateInstance(__uuidof(Parameter));
_variant_t vvar1;
vvar1=_variant_t(_bstr_t(cvar1));pam = pCmd->CreateParameter(_bstr_t("var1"),adVarChar,adParamInput,100,vvar1);
pCmd->Parameters->Append(pam);
pCmd->Execute(NULL, NULL, adCmdStoredProc);CoUninitialize();代码是执行到execute出错,报runtime错误。
菜鸟,不知道是我的数据类型还是那个地方出错了。
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
改成:
_ConnectionPtr pConn;
_RecordsetPtr pRst;
pConn.CreateInstance(__uuidof(Connection));
pRst.CreateInstance(__uuidof(Recordset));然后,把你的代码用如下代码包起来:
try
{
//你的代码
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}
pConn->ConnectionString = "Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=test";
pConn->Open("","","",adOpenUnspecified);
pCmd->ActiveConnection = pConn;
pCmd->CommandType = adCmdStoredProc;
pCmd->CommandText = _bstr_t("test1");
_ParameterPtr pam = NULL;
pam.CreateInstance(__uuidof(Parameter));
_variant_t vvar1,vvar2;
vvar1=_variant_t(_bstr_t(cvar1)); pam = pCmd->CreateParameter(_bstr_t("var1"),adVarChar,adParamInput,10,vvar1);
pCmd->Parameters->Append(pam);
pam = pCmd->CreateParameter(_bstr_t("var2"),adVarChar,adParamOutput,10,vvar2);
pCmd->Parameters->Append(pam);
pRst =pCmd->Execute(NULL, NULL, adCmdStoredProc);但是不知道用什么方法去得到pRst中返回的值,哪位高手能告诉我得到pCmd中的值得方法吗?
网上说的几个方法都试了
不行。
_bstr_t strRecord = pRst->Fields->GetItem("num")->GetValue().bstrVal; 如这里的bstrVal就报错num=(_bstr_t)pCmd->Parameters->get_Item ('2',"test1")->getvalue();
pCmd->Parameters->get_Item(2,_bstr_t("var2"));这两个都有问题,本人菜鸟实在是不知道,谢谢前辈指点!~~~~~~~~·
_variant_t var = pRst->GetCollect("num");
AfxMessageBox((LPCSTR)_bstr_t(var));
你上面那不是调用存储过程的方法吧
是不是执行SQL的方法啊