Eu não sei C#, mas suponho que você só possa enviar instruções SQL individuais ou blocos PL/SQL, não uma lista separada por ponto e vírgula. Em qualquer caso,
exec
não é nenhum (é um atalho do SQL*Plus suportado por alguns IDEs.) Você provavelmente precisa enviar comandos separados como algo como:
create directory test_dir as 'C:\\'
e
begin run_query('SELECT {1} FROM {2} {3} ORDER BY {4}','TEST_DIR','{5}'); end;
(Observe que o PL/SQL usa ponto e vírgula, mas o SQL não possui um terminador de instrução nativo, embora as ferramentas geralmente exijam um caractere terminador e o ponto e vírgula seja o padrão.)