Проблема SybaseIQ при отключении именованного канала (в ТАБЛИЦЕ ЗАГРУЗКИ)

У меня возникла проблема при попытке выполнить массовую загрузку с использованием именованного канала в SybaseIQ 15.4. Код написан на C++ и включает Windows.

В конце массива, после сброса буфера (FlushFileBuffers), когда я пытаюсь отключить именованный канал (DisconnectNamedPipe), работающий LOAD TABLE query сбой с "I/O Error on file \\.\pipe\pipename", хотя в документе сказано:

"The pipe writer must call FlushFileBuffers( ) and then DisconnectNamedPipe( ). (If you do not, Sybase IQ reports an exception from hos io::Read( ).) This issues a PIPE_NOT_CONNECTED error, which notifies Sybase IQ that the pipe was shut down in an orderly manner rather than an uncontrolled disconnect"

Обратите внимание, что если я удалю DisconnectNamedPipe, массовая загрузка будет в порядке.

Вот резюме кода, спасибо за вашу помощь

hPipe = CreateNamedPipe(strPipeName, PIPE_ACCESS_OUTBOUND, PIPE_TYPE_BYTE, 255, 65536, 65536, 100, NULL);

ConnectNamedPipe(hPipe, NULL);

// in another thread: LOAD TABLE myTable (...) USING CLIENT FILE strPipeName ...

WriteFile(hPipe, ...);

FlushFileBuffers(hPipe);
DisconnectNamedPipe(hPipe); // I/O Error on file \\.\pipe\pipename
CloseHandle(hPipe);

person Nyozeko    schedule 11.09.2012    source источник


Ответы (1)


Это была ошибка Sybase IQ. Используя 15.2 или используя последний EBR для 15.4, DisconnectNamedPipe работает нормально.

person Nyozeko    schedule 26.10.2012