У меня проблема при попытке выполнить массовую загрузку с использованием именованного канала в 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);
Это была ошибка Sybase IQ.
Используя 15.2 или используя последний EBR для 15.4, DisconnectNamedPipe работает отлично
Других решений пока нет …