Информация об изменениях

Сообщение ADO DB + Oracle provider + массив строк в качестве параметра от 26.11.2015 15:15

Изменено 26.11.2015 17:28 tdiff

Пытаюсь выполнить на сервере хранимку, одним из параметров которой является string_array (какой-то тип, определённый в их БД. Скорее всего, TYPE string_array AS VARRAY(999) OF VARCHAR2), но нигде не смог найти информации, поддерживает Oracle OLE DB provider передачу массива в качестве параметра SP или нет.
Если кто-то знает, где посмотреть, подскажите пожалуйста. Или кому-то уже удавалось это провернуть, буду рад совету.

Сейчас делаю вот так:

  код
SAFEARRAY* arr = SafeArrayCreateVector(VT_BSTR, 0, 1);
LONG idx = 0;
_bstr_t text = _bstr_t("test");
HRESULT res = SafeArrayPutElement(arr, &idx, text.GetBSTR());

_variant_t arg;
arg.vt = VT_ARRAY | VT_BSTR;
arg.parray = arr;

ADODB::DataTypeEnum type = static_cast<ADODB::DataTypeEnum>(ADODB::adArray | ADODB::adVarChar);
cmd->CommandText = "STORED_PROC_NAME";
cmd->Parameters->Append(cmd->CreateParameter(_bstr_t("INPUT_ARRAY"), type, ADODB::adParamInput, 128, arg));

ADODB::_RecordsetPtr rs(__uuidof(ADODB::Recordset));
rs = cmd->Execute(NULL, NULL, ADODB::adCmdStoredProc);


Получаю ошибку "Provider: -Requested conversion is not supported"
Пытаюсь выполнить на сервере хранимку, одним из параметров которой является string_array (какой-то тип, определённый в их БД. Скорее всего, TYPE string_array AS VARRAY(999) OF VARCHAR2), но нигде не смог найти информации, поддерживает Oracle OLE DB provider передачу массива в качестве параметра SP или нет.
Если кто-то знает, где посмотреть, подскажите пожалуйста. Или кому-то уже удавалось это провернуть, буду рад совету.

Сейчас делаю вот так:

  код
SAFEARRAY* arr = SafeArrayCreateVector(VT_BSTR, 0, 1);
LONG idx = 0;
_bstr_t text = _bstr_t("test");
HRESULT res = SafeArrayPutElement(arr, &idx, text.GetBSTR());

_variant_t arg;
arg.vt = VT_ARRAY | VT_BSTR;
arg.parray = arr;

ADODB::DataTypeEnum type = static_cast<ADODB::DataTypeEnum>(ADODB::adArray | ADODB::adVarChar);
cmd->CommandText = "STORED_PROC_NAME";
cmd->Parameters->Append(cmd->CreateParameter(_bstr_t("INPUT_ARRAY"), type, ADODB::adParamInput, 128, arg));

ADODB::_RecordsetPtr rs(__uuidof(ADODB::Recordset));
rs = cmd->Execute(NULL, NULL, ADODB::adCmdStoredProc);


Получаю ошибку "Provider: -Requested conversion is not supported"


Вообще, ADO умеет обмениваться кастомными типами?