大师好,近日刚刚接触VC调用存储过程这快,基本属于很蒙胧的状态,如下是我写的代码
CString v_return;
CString v_text;
CString tmp;
_ParameterPtr param;
param = m_pComm->CreateParameter("YYCXBBH",adVarChar, adParamInput,64,_variant_t("2.0"));
m_pComm->Parameters->Append(param);//为_CommandPtr添加参数
param = m_pComm->CreateParameter("DQQSRQ",adVarChar,adParamInput,64,_variant_t("2008"));
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("BL",adVarChar,adParamInput,64,_variant_t("YY"));
param = m_pComm->CreateParameter("",adVarChar,adParamOutput,4);
param = m_pComm->CreateParameter("",adVarChar,adParamOutput,64);
m_pComm->CommandText=_bstr_t("CS");//存储过程的名称
m_pComm->ActiveConnection = m_pConn;//需要使用的ADO连接
m_pComm->CommandType=adCmdStoredProc;
m_pComm->Execute(NULL, NULL, adCmdStoredProc); v_return = (CString)m_pComm->Parameters->GetItem("p_return")->GetValue();
v_text =(CString)m_pComm->Parameters->GetItem("p_text")->GetValue();//通过参数返回值,但提示数据类型错误
AfxMessageBox(v_text);初学乍练,让大师见笑了,在此先谢谢了
CString v_return;
CString v_text;
CString tmp;
_ParameterPtr param;
param = m_pComm->CreateParameter("YYCXBBH",adVarChar, adParamInput,64,_variant_t("2.0"));
m_pComm->Parameters->Append(param);//为_CommandPtr添加参数
param = m_pComm->CreateParameter("DQQSRQ",adVarChar,adParamInput,64,_variant_t("2008"));
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("BL",adVarChar,adParamInput,64,_variant_t("YY"));
param = m_pComm->CreateParameter("",adVarChar,adParamOutput,4);
param = m_pComm->CreateParameter("",adVarChar,adParamOutput,64);
m_pComm->CommandText=_bstr_t("CS");//存储过程的名称
m_pComm->ActiveConnection = m_pConn;//需要使用的ADO连接
m_pComm->CommandType=adCmdStoredProc;
m_pComm->Execute(NULL, NULL, adCmdStoredProc); v_return = (CString)m_pComm->Parameters->GetItem("p_return")->GetValue();
v_text =(CString)m_pComm->Parameters->GetItem("p_text")->GetValue();//通过参数返回值,但提示数据类型错误
AfxMessageBox(v_text);初学乍练,让大师见笑了,在此先谢谢了
出的COM异常吗?
v_text =(LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("p_text")->GetValue());//通过参数返回值,但提示数据类型错
用try{}catch(_com_error e){messagebox(e.description());}
see declaration of '_com_error'用了try{}catch{}后编译有这样的错误
不好意思啊
你的编译器没自动提示??
{
...
}
catch(_com_error& e)
{
// 获取错误代码
CString strMsg;
strMsg.Format(_T("(0x%08x) %s"), e.Error(), e.Description());
AfxMessageBox(strMsg);
}
YYCXBBH VARCHAR2
DQQSRQ CHAR
BL VARCHAR2返回字段 数据类型
QQID NUMBER 大概是这快地方错了
129 指示一个字符串值 (DBTYPE_STR)。 m_pComm->CreateParameter("DQQSRQ",adVarChar
DQQSRQ CHAR
REATE OR REPLACE PROCEDURE CS
( YHT_YYCXBBH IN VARCHAR2, --应用程序版本号
YHT_DQQSRQ IN CHAR, --当前清算日期
YHT_BL IN VARCHAR2, --保留
RETCODE OUT NUMBER,
RETMSG OUT VARCHAR2)
IS
U_PROCCODE NUMBER(8);
U_QQID NUMBER(12);
BEGIN
------------------------------------------------------------------取得副表ID
SELECT SID_YW_CSQQ.NEXTVAL
INTO U_QQID
FROM DUAL;
----------------------------------------------------------------------------
BEGIN
----------------------------------------------------新增网络测试请求表记录
INSERT INTO YW_CSQQ(QQID,YYCXBBH,DQQSRQ,BL)
VALUES(U_QQID,YHT_YYCXBBH,YHT_DQQSRQ,YHT_BL);
--------------------------------------------------------------返回成功标志
COMMIT;
RETCODE:=1;
RETMSG:='操作成功';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RETCODE:=SQLCODE;
RETMSG:=SQLERRM;
END;
END; -- Procedure
param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2008"));
try
{
param = m_pComm->CreateParameter("YHT_YYCXBBH",adVarChar,adParamInput,64,_variant_t("2"));
m_pComm->Parameters->Append(param); //为_CommandPtr添加参数
param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2008"));
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("YHT_BL",adVarChar,adParamInput,64,_variant_t("YY"));
param = m_pComm->CreateParameter("RETCODE",adInteger,adParamOutput,4);
param = m_pComm->CreateParameter("RETMSG",adVarChar,adParamOutput,64);
m_pComm->CommandText=_bstr_t("CS"); //存储过程的名称
m_pComm->ActiveConnection=m_pConn; //需要使用的ADO连接
m_pComm->CommandType=adCmdStoredProc;
m_pComm->Execute(NULL,NULL,adCmdStoredProc);
v_return = (LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("QQID")->GetValue());
v_text =(LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("PROCCODE")->GetValue());//
AfxMessageBox(v_return);
}
catch(_com_error e)
{
MessageBox(e.Description());
}
param = m_pComm->CreateParameter("YHT_YYCXBBH",adVarChar,adParamInput,64,_variant_t("3"));
m_pComm->Parameters->Append(param);
//为_CommandPtr添加参数
param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2009"));
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("YHT_BL",adVarChar,adParamInput,64,_variant_t("ww"));
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("RETCODE",adInteger,adParamOutput,4);
m_pComm->Parameters->Append(param);
param = m_pComm->CreateParameter("RETMSG",adVarChar,adParamOutput,64);
m_pComm->Parameters->Append(param);