2012-05-11 1 views
3

У меня есть база данных MySQL с таблицей, содержащей столбец BINARY(16).Двоичные данные, записанные в таблицу MySQL через ODBC, усекаются

Когда я пишу двоичные данные через ODBC из своего приложения на C++, данные обрабатываются как строка с нулевым завершением, т. Е. Она усекается в первом нулевом байте в данных.

В моем приложении C++ я связать unsigned char [16] массив, используя SQLBindParameter так:

SQLBindParameter(statementHandler, paramCount, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, MAX_NOTIFICATION_OUT_IP_BIN_LEN, 0, _notificationOutDstIP, MAX_NOTIFICATION_OUT_IP_BIN_LEN, 0); 

MAX_NOTIFICATION_OUT_IP_BIN_LEN является 16.

Как я могу убедиться, что 16 байт записываются в базу данных, даже если двоичные данные содержат значения Null?

ответ

2

Из MSDN documentation for SQLBindParameter:

Если StrLen_or_IndPtr является нулевым указателем, то драйвер предполагает, что все значения входных параметров являются не- NULL и что характер и двоичные данные нуля.

Вместо того, установлено, что аргумент, чтобы быть указателем на длину данных:

SQLBindParameter(statementHandler, 
       paramCount, 
       SQL_PARAM_INPUT, 
       SQL_C_BINARY, SQL_BINARY, 
       MAX_NOTIFICATION_OUT_IP_BIN_LEN, 
       0, 
       _notificationOutDstIP, 
       MAX_NOTIFICATION_OUT_IP_BIN_LEN, 
       &MAX_NOTIFICATION_OUT_IP_BIN_LEN 
); 
+0

OBV, это предполагает, что 'MAX_NOTIFICATION_OUT_IP_BIN_LEN' является' int' ('const' или иным образом); если это макрос, вам сначала нужно назначить его некоторой переменной, которую вы ссылаетесь. – eggyal

+0

Спасибо большое! Теперь это работает :) –

Смежные вопросы