存储名称:nlv_package.pro_mep存储参数:
序号 名称 输入/输出 类型 说明
1 HPZL 输入 VARCHAR2(2) 号牌种类,可以为空,按GA24.7
2 HPHM 输入 VARCHAR2(16) 号牌号码,可以为空
3 WFSJ 输入 DATE 违法时间,不可以为空
4 WFXW 输入 VARCHAR2(5) 违法行为,不可以为空,引用5 WFDD 输入 VARCHAR2(12) 违法地点代码,不可以为空,按GA408.3,(编码规则见“附录2”)。
6 WFDZ 输入 VARCHAR2(200) 违法地址,可以为空,
7 CJR 输入 VARCHAR2(8) 采集人警号
8 CJJG 输入 VARCHAR2(10) 采集机关,不可以为空,引用NLV_UNIT_LOCAL.DM
9 SJLY 输入 VARCHAR2(2) 数据来源,不可以为空,具体说明见“附录4”。
10 ZPLX 输入 CHAR(1) 抓拍类型,不可以为空,取下列值之一:
11 SBBH 输入 VARCHAR2(16) 设备编号,不可以为空,引用NLV_DEVICE.SBBH
12 DLGLS 输入 NUMBER(4) 道路公里数,不可以为空
13 DLMS 输入 NUMBER(3) 道路米数,不可以为空
14 FJBZ 输入 VARCHAR2(50) 附近标记,可以为空
15 CLSD 输入 NUMBER(3) 车辆速度,可以为空
16 DCXS 输入 NUMBER(3) 大车限速,可以为空
17 XCXS 输入 NUMBER(3) 小车限速,可以为空
18 DCZFXS 输入 NUMBER(3) 大车执法限速,可以为空
19 XCZFXS 输入 NUMBER(3) 小车执法限速,可以为空
20 ZDXS 输入 NUMBER(3) 最低限速,可以为空
21 ZJWJ1 输入 BLOB 证据图片一,不可以为空
22 ZJWJ2 输入 BLOB 证据图片二,可以为空
23 ZJWJ3 输入 BLOB 证据图片三,可以为空
24 ZJWJ4 输入 BLOB 证据图片四,可以为空
25 ZXJG 输出 INTEGER 执行结果,(详细见“附录1”)
调用存储过程的代码如下:
::CoInitialize(NULL);//初始化com组件pCon.CreateInstance(__uuidof(Connection));//实例化
pRec.CreateInstance(__uuidof(Recordset));
comm.CreateInstance(__uuidof(Command));             HRESULT   hr;
AfxMessageBox("开始进行连接");
try
{
//_10.231.152.15
        hr=pCon->Open("Provider=MSDAORA.1;;Data Source=NLV;Password=GUEST;User ID=NLV_GUEST;Persist Security Info=True","","",adModeUnknown);
}
catch(_com_error *e)
{
MessageBox(e->ErrorMessage());
}
AfxMessageBox("连接结束");//oracle执行存储过程的准备
comm->ActiveConnection     =     pCon;     //ADO连接     
comm->CommandType   =   adCmdStoredProc;   
comm->CommandText=_bstr_t(L"nlv_package.pro_mep");     //存储过程名      

comm->Parameters->Append(comm->CreateParameter("HPZL",adBSTR,adParamInput,2,_variant_t(hpzl))); 

comm->Parameters->Append(comm->CreateParameter("HPHM",adBSTR,adParamInput,16,_variant_t(hphm))); 

comm->Parameters->Append(comm->CreateParameter("WFSJ",adDBTimeStamp,adParamInput,20,_variant_t(wfsj)));
comm->Parameters->Append(comm->CreateParameter("WFXW",adBSTR,adParamInput,5,_variant_t(wfxw)));
comm->Parameters->Append(comm->CreateParameter("WFDD",adBSTR,adParamInput,12,_variant_t(wfdddm)));
comm->Parameters->Append(comm->CreateParameter("WFDZ",adBSTR,adParamInput,200,_variant_t(wfdd)));
comm->Parameters->Append(comm->CreateParameter("CJR",adBSTR,adParamInput,8,""));
comm->Parameters->Append(comm->CreateParameter("CJJG",adBSTR,adParamInput,10,_variant_t(cjjg)));
comm->Parameters->Append(comm->CreateParameter("SJLY",adBSTR,adParamInput,2,_variant_t(sjly)));
comm->Parameters->Append(comm->CreateParameter("ZPLX",adBSTR,adParamInput,1,_variant_t(zplx)));
comm->Parameters->Append(comm->CreateParameter("SBBH",adBSTR,adParamInput,16,_variant_t(sbbh)));
comm->Parameters->Append(comm->CreateParameter("DLGLS",adNumeric,adParamInput,4,dlgl));
comm->Parameters->Append(comm->CreateParameter("DLMS",adNumeric,adParamInput,3,dlms));
comm->Parameters->Append(comm->CreateParameter("FJBZ",adBSTR,adParamInput,6,""));comm->Parameters->Append(comm->CreateParameter("CLSD",adNumeric,adParamInput,3,cpsd));
comm->Parameters->Append(comm->CreateParameter("DCXS",adNumeric,adParamInput,3,dcxs));
comm->Parameters->Append(comm->CreateParameter("XCXS",adNumeric,adParamInput,3,xcxs));
comm->Parameters->Append(comm->CreateParameter("DCZFXS",adNumeric,adParamInput,3,dczf));
comm->Parameters->Append(comm->CreateParameter("XCZFXS",adNumeric,adParamInput,3,xczf));
comm->Parameters->Append(comm->CreateParameter("ZDXS",adNumeric,adParamInput,3,0));comm->Parameters->Append(comm->CreateParameter("ZJWJ1",adBSTR,adParamInput,100,_variant_t(tp1)));
comm->Parameters->Append(comm->CreateParameter("ZJWJ2",adBSTR,adParamInput,100,_variant_t(tp2)));
comm->Parameters->Append(comm->CreateParameter("ZJWJ3",adBSTR,adParamInput,6,""));
comm->Parameters->Append(comm->CreateParameter("ZJWJ4",adBSTR,adParamInput,6,""));int hh;
comm->Parameters->Append(comm->CreateParameter("ZXJG",adInteger,adParamOutput,sizeof(int),hh));  try
{
comm->Execute(NULL,NULL,adCmdUnknown);    //到这就出错了}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
AfxMessageBox("存储完成");
_variant_t var=comm->Parameters->GetItem("ZXJG")->GetValue();
comm->Release();希望兄弟姐们帮我看看啊

解决方案 »

  1.   

    comm->Release()调用是错误的,必须使用comm.Release()
      

  2.   

    谢谢了,我现在的问题不是这个,就是在执行存储的时候就出错了,出的是 "Runtime Error ....abnormal program termination"这个错误.
    大哥们帮我看看啊,我快急死了.
      

  3.   

    comm->Execute(NULL,NULL,adCmdUnknown); 
    这句的一个null那里应该是一条SQL语句吧
    Set recordset = connection.Execute (CommandText, RecordsAffected, Options)CommandText 
    A String value that contains the SQL statement, stored procedure, a URL, or provider-specific text to execute. Optionally, table names can be used but only if the provider is SQL aware. For example if a table name of "Customers" is used, ADO will automatically prepend the standard SQL Select syntax to form and pass "SELECT * FROM Customers" as a T-SQL statement to the provider. 
      

  4.   

    comm->Execute(NULL,NULL,adCmdUnknown);
    改成:
    comm->Execute(NULL,NULL,adCmdStoredProc);试试
      

  5.   

    我之前就是用的这个,然后换成adCmdUnknown的,我怀疑是数据类型与oracle库中的数据类型对不上,请兄弟们帮我看看吧,快哭死额了。
      

  6.   

    是不是BLOB字段参数不对的原因?? 建议你写个测试的存储过程,然后把上面的参数一部分一部分的测试..太多了,不好定位到底是哪个参数的问题..
      

  7.   

    谢谢 tabby,确实有这个毛病,你能不能再帮我看看其他的数据类型是否对应,因为我这测试的环境要到现场去,不好搭配。谢谢了
      

  8.   

    我这也没有环境,测试不了,所以只是把容易出错的几个参数指出一下,一个是BLOB,一个是日期型..
    不用是现场吧,你公司或者家里装了oracle的话都可以测试啊..
      

  9.   

    关键是我只有这个oracle存储的接口,其他的都是没有,我下午去他们那测试,看看吧。谢谢你了,哥们。