Как передать динамический массив (std :: vector) в функцию odbc SQLBindParameter - PullRequest
0 голосов
/ 15 сентября 2011

Прототип функции выглядит следующим образом:

SQLRETURN SQLBindParameter(
      SQLHSTMT        StatementHandle,
      SQLUSMALLINT    ParameterNumber,
      SQLSMALLINT     InputOutputType,
      SQLSMALLINT     ValueType,
      SQLSMALLINT     ParameterType,
      SQLULEN         ColumnSize,
      SQLSMALLINT     DecimalDigits,
      SQLPOINTER      ParameterValuePtr,
      SQLLEN          BufferLength,
      SQLLEN *        StrLen_or_IndPtr);

Меня больше интересуют параметры 6,8, 9 и 10 и то, как они применяются к переменным строкам. Другие встроенные типы данных кажутся менее проблематичными Все примеры, которые я видел в интернете например http://msdn.microsoft.com/en-us/library/ms709287(v=vs.85).aspx используйте статические массивы, которые кажутся прямыми. Но я хочу используйте std :: vector и все мои попытки потерпели неудачу.

Скажем, я хочу связать эти строки.

std::vector<std::string> countries = boost::assign::list_of("Argentina")( "Burkina Faso")( "China")( "Dominica Republic");

Примечание: я использую std::vector<string> для удобства объявления. Я не могу отправить c.str() в базу данных, драйвер должен иметь возможность изменять строку в некоторых ситуациях

Итак, я объявляю буфер следующим образом

std::vector<char> my_data;

и скопируйте мои строки в буфер.
Как мне тогда передать следующие параметры:

ColumnSize ?
ParameterValuePtr ? // this I think I am sure should be &my_data[0]
BufferLength ?

1 Ответ

0 голосов
/ 15 сентября 2011

Примечание: я использую std :: vector для удобства объявления.Я не могу отправить c.str () в базу данных, драйвер должен иметь возможность изменять строку в некоторых ситуациях

Если вы используете C ++ 11, то вы можете сделать std::string& str = myVectorOfStrings[i]; char* buf = &str[0];нет копии требуется.

1007 * Если вы используете C ++ 03 это немного более спорно, чтобы, насколько безопасно это .Строго говоря, тогда не гарантировалось, что струны были смежными, но многие из нас решили, что - по разным причинам - было бы достаточно безопасно предположить это в любом случае.

Если вас это не устраивает, тогдаваш нынешний подход в значительной степени правильный ... и тогда, да, char* buf = &myVectorOfCopiedChars[0] правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...