这是别人给我的存储过程,ORACLE817的,WIN2K平台下
(
idname in varchar2,id out integer)
as
row_count integer;
begin
lock table t_identity in row exclusive mode;
update t_identity
set maxno=maxno + 1
where name=idname;
select maxno into id from t_identity where name=idname;
commit;
end;
这是我调用存储过程的函数,返回值是ID值,但是再*****那一行出错
int GetNewID(char *Inputstr)
{
int ret=-1; //调用带输入和输出参数的存储过程
_CommandPtr cmd;
cmd.CreateInstance("ADODB.Command");
//输入参数
_ParameterPtr pParamRk;
pParamRk.CreateInstance("ADODB.Parameter"); //pParamRk->Name="mo07"; //存储过程的参数1
pParamRk->Type=adChar; //字符串
pParamRk->Size=20;
pParamRk->Direction=adParamInput;//表明是输入参数
pParamRk->Value=_variant_t(Inputstr);//int->CString->_variant_t后赋值
//****************************************
cmd->Parameters->Append(pParamRk);//此句执行出错????????
//****************************************
//输出参数
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
//pParamOk->Name="rowcount"; //参数2名称
pParamOk->Type=adInteger; //整型
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);
cmd->ActiveConnection = m_pConnection;
cmd->CommandText="ADE.PROC_ALLOC_ID"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
//执行,获得结果
_RecordsetPtr m_pRecordset;
m_pRecordset = cmd->Execute(NULL, NULL, adCmdStoredProc);
printf("storeproc id is:%s\n",(char*)_bstr_t(pParamOk->Value));
//AfxMessageBox((char*)_bstr_t(pParamRk->Value));
//AfxMessageBox((char*)_bstr_t(pParamOk->Value));
ret=atoi((char*)_bstr_t(pParamOk->Value)); return ret;
}出的错是系统错误Debug error!
(
idname in varchar2,id out integer)
as
row_count integer;
begin
lock table t_identity in row exclusive mode;
update t_identity
set maxno=maxno + 1
where name=idname;
select maxno into id from t_identity where name=idname;
commit;
end;
这是我调用存储过程的函数,返回值是ID值,但是再*****那一行出错
int GetNewID(char *Inputstr)
{
int ret=-1; //调用带输入和输出参数的存储过程
_CommandPtr cmd;
cmd.CreateInstance("ADODB.Command");
//输入参数
_ParameterPtr pParamRk;
pParamRk.CreateInstance("ADODB.Parameter"); //pParamRk->Name="mo07"; //存储过程的参数1
pParamRk->Type=adChar; //字符串
pParamRk->Size=20;
pParamRk->Direction=adParamInput;//表明是输入参数
pParamRk->Value=_variant_t(Inputstr);//int->CString->_variant_t后赋值
//****************************************
cmd->Parameters->Append(pParamRk);//此句执行出错????????
//****************************************
//输出参数
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
//pParamOk->Name="rowcount"; //参数2名称
pParamOk->Type=adInteger; //整型
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);
cmd->ActiveConnection = m_pConnection;
cmd->CommandText="ADE.PROC_ALLOC_ID"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
//执行,获得结果
_RecordsetPtr m_pRecordset;
m_pRecordset = cmd->Execute(NULL, NULL, adCmdStoredProc);
printf("storeproc id is:%s\n",(char*)_bstr_t(pParamOk->Value));
//AfxMessageBox((char*)_bstr_t(pParamRk->Value));
//AfxMessageBox((char*)_bstr_t(pParamOk->Value));
ret=atoi((char*)_bstr_t(pParamOk->Value)); return ret;
}出的错是系统错误Debug error!
解决方案 »
- ---------------------》对话框中同时显示两副位图的问题《----------------------
- 利用sql语句向access数据库中创建一张表,并添加字段(数字型的,时间型的(包括年月日时分秒)),怎么写该语句!详细字段及类型如下!
- OpenDocumentFile的参数其中带一部分乱码,如何解决??
- 大家帮我推荐一个绿色的小的支持命令行参数的FTP客户端软件!
- 在nurbs曲面上如何映射纹理?
- 如何在全局钩子中取得当前活动的进程模块?
- 问.sln的问题.
- 动态库DLL运行时有奇怪问题
- 为什么我的dll连接库不能返回字符串?帮忙啦
- 有朋友遇到if(){XX}else{YY}里面XX YY都执行的么
- 如何使Web页面与程序交互
- 请问我用setwindowlong得到另一个按钮的消息循环,但是按钮不能发出WM_DRAWITEM消息
ADODB::_ParameterPtr pParam1, pParam2;
try
{
pCmd.CreateInstance("ADODB.Command");
pCmd->ActiveConnection = m_pConnection; pCmd->CommandType = ADODB::adCmdStoredProc;
pCmd->CommandText = "prcSaveCyClass"; //存储过程名
pParam1 = pCmd->CreateParameter(_bstr_t("mo07"), ADODB::adVarChar, ADODB::adParamInput, 20, _variant_t(Inputstr));
pCmd->Parameters->Append(pParam1);
pParam2 = pCmd->CreateParameter(_bstr_t("rowcount"),ADODB::adInteger, ADODB::adParamOutput, 20);
pCmd->Parameters->Append(pParam2);
pCmd->Execute(NULL, NULL, ADODB::adCmdStoredProc);
iRet = (pParam2->Value).intVal;
}
catch(_com_error e) // 捕捉异常
{
....
}
cmd.CreateInstance("ADODB.Command");
try
{
//输入参数
_ParameterPtr pParamRk;
pParamRk.CreateInstance("ADODB.Parameter"); cmd->ActiveConnection = m_pConnection;
cmd->CommandText="ADE.PROC_ALLOC_ID"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
printf("building 11!\n");
//pParamRk->Name="mo07"; //存储过程的参数1
pParamRk->Type=adChar; //字符串
printf("building 111!\n");
pParamRk->Size=20;
printf("building 1111!\n");
pParamRk->Direction=adParamInput;//表明是输入参数 printf("building 11111!\n");
pParamRk->Value=_variant_t(Inputstr);//int->CString->_variant_t后赋值 printf("building 111111!\n");
cmd->Parameters->Append(pParamRk); printf("building 2!\n");
//输出参数
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
//pParamOk->Name="rowcount"; //参数2名称
pParamOk->Type=adInteger; //整型
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);
printf("building 4!\n");
//执行,获得结果
_RecordsetPtr m_pRecordset;
m_pRecordset = cmd->Execute(NULL, NULL, adCmdStoredProc);
printf("storeproc id is:%s\n",(char*)_bstr_t(pParamOk->Value));
//AfxMessageBox((char*)_bstr_t(pParamRk->Value));
//AfxMessageBox((char*)_bstr_t(pParamOk->Value));
ret=atoi((char*)_bstr_t(pParamOk->Value)); return ret;
}
catch(_com_error e) // 捕捉异常
{
_bstr_t bstrSource(e.Source());
_bstr_t bs = _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ")
+ _bstr_t(e.ErrorMessage()) + _bstr_t(" Description: ")
+ _bstr_t(e.Description());
printf("%s\n",(char*)_bstr_t(bs));
return -1;
}catch显示无效指针,因为一些客观原因没法单步调试,只能将我的机器的程序编译好了多加个printf,郁闷透了.
cmd.CreateInstance("ADODB.Command");之前调用一下AfxOleInit()
catch说是无效指针。但是,我编写的这个函数在我自己的机器上怎么运行都正常啊!!!感谢各位的帮助,如果各位给我提供的办法尝试成功,800分绝对少不了,再次谢谢各位!
首先调用AfxOleInit()或者CoInitialize()试一下。
如果这两个都不成功,可能是权限不够,你在服务器上用Administrator登录之后再试试看行不行。