C ++ ADO存储过程错误:语法错误或访问冲突

时间:2014-03-11 14:22:15

标签: c++ sql-server visual-studio stored-procedures ado

我试图在C ++中通过ADO运行SQL存储过程。调用该过程(为了参数)testProcedure并期望两个参数:@ param1和@param2。以下是执行方法中代码的修剪版本:

        m_mCommandParameters[_T("param1")] = _T("foo");
        m_mCommandParameters[_T("param2")] = _T("bar");

        pCommand.CreateInstance(__uuidof(Command));
        pCommand->ActiveConnection = link;
        pCommand->CommandType = adCmdStoredProc;
        pCommand->CommandText = _T("testProcedure");
        pCommand->PutPrepared(true);
        pCommand->NamedParameters = true;

        // Set up the variant to store the parameter values
        VARIANT vParamValue;
        vParamValue.vt = VT_BSTR;

        CString paramCount; // Stores the count for use as parameter name

        // Iterate through set parameters and apply them to command
        map<CString,CString>::iterator mItr;
        for(mItr = m_mCommandParameters.begin(); mItr != m_mCommandParameters.end(); mItr++) {
            paramCount = mItr->first;
            vParamValue.bstrVal = _bstr_t(mItr->second);

            // Append the parameter
            if (mItr->second.IsEmpty()) {
                _variant_t vtNULL;
                vtNULL.vt = VT_NULL;
                pCommand->Parameters->Append(
                    pCommand->CreateParameter(_bstr_t(L"@"+paramCount),adVarChar,adParamInput,10,vtNULL)
                );
            } else {
                pCommand->Parameters->Append(
                    pCommand->CreateParameter(_bstr_t(L"@"+paramCount),adVarWChar,adParamInput,
                                                //commandParameters[i].GetLength()+1,
                                                sizeof(vParamValue),
                                                _bstr_t(vParamValue))
                );
            }

        }

        _variant_t vRecordsAffected;
        pRecordSet = pCommand->Execute(&vRecordsAffected,NULL,adCmdStoredProc);

我的理解是,这应该基本上执行以下内容:

testProcedure @param1 = 'foo', @param2 = 'bar'

如果我打开SQL管理工作室并运行上面的工作正常。但是当我尝试运行C ++时,我得到错误:

  

数据库错误IDispatch错误#3092 80040e14查询:testProcedure;   [Microsoft] [ODBC SQL Server驱动程序]语法错误或访问冲突。

我只有SQL express,所以没有SQL profiler;我通常使用Express Profiler但由于某种原因它不会在存储过程中显示任何跟踪。所以我不知道如何开始调试。

谢谢!

0 个答案:

没有答案