CreateProcess操作SQLPLUS実行SQLファイル


sqlplus -S "scott/tiger@orcl"@"E:\1.sql"
-S:ヒントなしモード、削除可能
"scott/tiger@orcl":接続情報、アカウント、パスワード、TNS
@「E:1.sql」:実行するSQLファイルのパスは、@
1.SQLにはinsert、update、deleteなどがあり、commitを使用する必要があります.そうしないと、変更は無効です.
-----------------------------------------------------------------------------------------------------------------------------
上記の操作をプログラムで柔軟に使用するには、コードによってウィンドウレスコマンドコンソールを作成し、上記の操作を実行します.
	SECURITY_ATTRIBUTES   sa; 
	HANDLE   hRead,hWrite; 

	sa.nLength   =   sizeof(SECURITY_ATTRIBUTES); 
	sa.lpSecurityDescriptor   =   NULL; 
	sa.bInheritHandle   =   TRUE; 
	if   (!CreatePipe(&hRead,&hWrite,&sa,0))   
	{ 
		return   FALSE; 
	}   

	PROCESS_INFORMATION   pi;   
	ZeroMemory(&pi,sizeof(pi));

	STARTUPINFO   si; 
	ZeroMemory(&si,sizeof(si));
	si.cb   =   sizeof(STARTUPINFO); 
	si.hStdError   =   hWrite; 
	si.hStdOutput   =   hWrite; 
	si.dwFlags   =   STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; 
	si.wShowWindow   =   SW_SHOW; 
	si.lpReserved = NULL;
	si.lpDesktop = NULL;
	si.lpTitle = NULL;
	si.cbReserved2 = NULL;
	si.lpReserved2 = NULL;
	//    ,CreateProcess         MSDN 
	char cA[] = "sqlplus -S \"scott/tiger@orcl\" \"@E:\\1.sql\"";
	if (!CreateProcess( NULL,cA,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))   
	{ 
		DWORD d = GetLastError();
		return   ""; 
	} 
	CloseHandle(hWrite); 

	char   buffer[4096]   =   {0}; 
	DWORD   bytesRead;   
	std::string strOutPut = "";

	while   (true)   
	{ 
		if   (ReadFile(hRead,buffer,4095,&bytesRead,NULL)   ==   NULL) 
			break; 
		//buffer        ,       ,        
		//printf(buffer); 
		strOutPut += buffer;
		//Sleep(200);   
	}


	return   strOutPut;