3

列を含むテーブルを持つ MySQL データベースがありBINARY(16)ます。

C++ アプリケーションから ODBC 経由でバイナリ データを書き込むと、データは Null で終わる文字列のように扱われます。つまり、データの最初の Null バイトで切り捨てられます。

私の 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です。

バイナリ データに Null 値が含まれている場合でも、データベースに 16 バイトが書き込まれるようにするにはどうすればよいですか?

4

1 に答える 1

2

MSDNドキュメントからSQLBindParameter

が null ポインターの場合、ドライバーは、すべての入力パラメーター値が非であり、その文字およびバイナリ データが null で終了している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
);
于 2012-05-11T09:02:27.297 に答える