我的SQL文件包含传递文件名用空格假脱机使用SQL Plus命令给SP2-0768 Illegral SPOOL命令错误
`SPOOL &1;
//sql code to execute
SPOOL OFF;`
使用SQL Plus和SQL Plus被执行的SQL文件从C#代码调用使用的Process.Start ...代码剪断
`var m_StartInfo = new ProcessStartInfo();
m_StartInfo.FileName = "SQLPLUS.EXE";
m_StartInfo.CreateNoWindow = true;
m_StartInfo.UseShellExecute = false;
m_StartInfo.Arguments = String.Format("{0}\"{1}\" \"{2}\"", connectionString, sqlfile, sqlLogFileName);
m_Process = Process.Start(m_StartInfo);
Other code.....`
它工作正常,sqlplus的日志在sqlLogFileName位置创建罚款。但是,如果sqlLogFileName之间存在空格(比如说“C:\ My Application \ log.txt”),则不会创建日志文件,而是在SQL Plus窗口上出现错误SP2-0768非法SPOOL命令
任何建议如何解决这个问题?我正在使用Oracle 11GR2
我在互联网上发现的一切都表明您需要使用“>”来指定输出到您的日志文件。所以'm_StartInfo.Arguments'的格式字符串应该是'“{0} \”{1} \“> \”{2} \“”'。他们没有提到在SQL脚本本身中主动使用Spool命令。 – StarPilot 2014-10-27 22:16:01
使用“>”不能解决问题。我从sql文件中删除了spool&1,并将m_StratInfo.Arguments作为“{0} \”{1} \“> \”{2} \“”传递,但它没有克隆日志文件 – Savy17 2014-10-29 17:18:59