我在尝试在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可以正常工作

关于c++ - Sybase IQ有关断开命名管道的问题(在LOAD TABLE上),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12373408/

10-13 03:46