Как использовать GUID в качестве параметра запроса ADO с использованием C ++ ADO - PullRequest
1 голос
/ 08 июня 2011

Учитывая базу данных SQL Server, которая использует уникальные идентификаторы в качестве полей первичного ключа для таблицы, к которой я хочу запросить, и структуру GUID (включенную через rpc.h), которая имеет значение одной из записей в таблице, как мне создать ADODB :: Параметр, который хранит это значение?

Я понимаю, что параметры принимают свои значения как _variant_t. Как мне добраться от GUID до _variant_t? Приведение приводит к ошибке, а тип _variant_t не принимает GUID в конструкторе.

Я создаю объекты команд и параметров следующим образом:

HRESULT hr;
_CommandPtr selectCmd;
hr = selectCmd.CreateInstance(__uuidof(ADODB::Command));
if (FAILED(hr))
    throw _com_error(hr);

selectCmd->CommandText = L"SELECT .... WHERE id=@id";
selectCmd->Parameters->Append(selectCmd->CreateParameter(L"@id",DataTypeEnum::adGUID, ParameterDirectionEnum::adParamInput, 16, /* what to put here? */));

1 Ответ

4 голосов
/ 08 июня 2011

Передайте строку, отформатированную с помощью фигурных скобок. Если у вас есть значение guid, хранящееся в переменной типа System.Guid, вы можете использовать спецификатор формата «B». Как это:

  var arg = guid.ToString("B");

См. эту веб-страницу для справки.

Упс, это код C #, вы можете сгенерировать строку в C ++ с помощью StringFromIID ().

...