Parameterübergabe an ORACLE StoredProcedure
-
Hi,
ich möchte 26 Parameter an eine StoredProcedure übergeben und diese dann ausführen.Ich hab folgenden Code (hier nur Ausschnitte)
ADODB::_CommandPtr myCmd;
hr = myCmd.CreateInstance(__uuidof(ADODB::Command));
if (FAILED(hr))
{
throw _com_error(hr);
}//Verbindung zur Datenbank wird hergestellt
myCmd->ActiveConnection = connection;
myCmd->CommandText = "UpdateEvents"; //Name der StoredProcedure
myCmd->CommandType = ADODB::adCmdStoredProc;//Mein Code sieht dann für jeden Parameter wie folgt aus (Bsp):
ADODB::_ParameterPtr Event;
Event = myCmd->CreateParameter(_bstr_t(L""),ADODB::adChar, ADODB::adParamInput, 4, _variant_t("test")) ;
Event->Value = _variant_t("test");
myCmd->Parameters->Append(Event);//Die festen Values sollen dann später noch durch variablen ersetzt werden
//und am Ende hab ichmyCmd->Execute;
Denk mal, dass es wahrscheinlich am execute liegen wird.
Vielleicht kann mir ja jemand weiterhelfen. Hab so was bis jetzt nur in VB gemacht.Schonmal Danke im Voraus!
-
Hallo,
verwendest du irgendeine Klassenbibliothek? Wenn ja, welche? Und welchen Compiler benutzt du?
-
Ich habe das Programm mit Visual C++ 6.0 (Visual Studio 6.0 Enterprise Edition)geschrieben.
Was Klassenbibliothek ist weiß ich leider nicht so ganz genau, hab mit C noch nicht so viel zu tun gehabt, muss nur ein Programm abändern und dafür hab ich mir ein Testprogramm geschrieben, das einfach ein paar werte an die StoredProcedure übergeben soll. Hab hier mal meine Includes usw.
#include <iostream>
#include <string>
#include "Windows.h"
#include <stdio.h>#import <Msado15.dll> rename("EOF", "adoEOF") rename("BOF", "adoBOF")
std::string outputashex(unsigned long l)
{
char buffer[1024];
::itoa(l, buffer, 16);
return buffer;
};
-
Hallo,
ich denke die Frage passt besser nach MFC. Datenbankanbindung/StoredProcedures ist von Standard-C++ soweit entfernt, dass man dir hier kaum eine hilfreiche Anwort geben kann.
-
Ok, ich hab jetzt ein paar sachen geändert und es scheint nun fast zu gehen. Das Problem liegt nun bei den Typen, da ich ein SQL Fehler bekomme (von einer StoredProcedure die mit einem VB Programm funktioniert).
Also:
Hab folgendes hinzugefügt:
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);und das execute umgeschrieben:
myCmd->Execute(&vtEmpty, &vtEmpty2, ADODB::adCmdText );
So, kann mir jetzt vielleicht jemand verraten ob ich die Typen (adchar und adDate) richtig einlese!?
Bsp:
Event = myCmd->CreateParameter(_bstr_t(L""),ADODB::adChar, ADODB::adParamInput, 4, _variant_t("$124")) ;
Event->Value = _variant_t("$124");
myCmd->Parameters->Append(Event);Timestamp = myCmd->CreateParameter(_bstr_t(L""),ADODB::adDate, ADODB::adParamInput, 19, _variant_t("2003-08-15 13:43:58"));
Timestamp->Value = _variant_t("2003-08-15 13:43:58");
myCmd->Parameters->Append(Timestamp);Level = myCmd->CreateParameter(_bstr_t(L""),ADODB::adNumeric, ADODB::adParamInput, 22, _variant_t("3")) ;
Level->Value = _variant_t("3");
myCmd->Parameters->Append(Level);