我嘗試編寫一個像編譯器一樣的程序。在這種情況下,我必須模擬SQLPL的這些代碼(這個例子可以是例子)。例如在命令提示符下我想要做到這些:如何避免死鎖條件
c:\> sqlplus
....
Enter User-Name:(here we must enter username) xxxx
Enter password:(same up)yyyyy
...
sql>(now I want to send my sql command to shell)prompt "rima";
"rima" [<-output]
sql> prompt "xxxx"
sql> exit
很簡單。 我嘗試使用此代碼:
ProcessStartInfo psi = new ProcessStartInfo(
@"sqlplus");
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
//psi.RedirectStandardError = true;
Process process = new Process();
process.StartInfo = psi;
bool started = process.Start();
if (started)
{
process.StandardInput.WriteLine("user/password");
process.StandardInput.Flush();
string ret = process.StandardOutput.ReadLine(); // <-- stalls here
System.Console.WriteLine("sqlplus says :" + ret + "\".");
}
我發現它形成here但如果你讀這段代碼有問題! DEADLOCK條件問題! 這是我第二次問我的問題,每當我的知識越來越多,但我不能得到我終於可以解決我的問題!
所以我親切地吻你的手,請幫助我,這個過程對我來說並不明確。任何人都可以給我一個處理我的問題的代碼?我已經看過所有的代碼,也嘗試使用ProcessRunner,在我上一篇文章中提供了一些,但是我也無法使用它,我收到一個錯誤。
我希望能在第一個例子,你發現我想要的東西,並解決第二個問題的代碼...
我使用C#的實施,也是我的DB是Oracle
我不想關閉每次連接sqlplus都需要一段時間才能重新登錄。
此外,我們可以獲取用戶,並通過像XXXX/YYYYY到sqlplus中。 在這種情況下,你的想法是什麼? – Amir 2010-05-19 09:38:38
發送不是問題,您將在用戶名/密碼後發送換行符。但接受是你的問題。恕我直言,你必須用異步解決方案去找出問題的輸入以及你得到的答案 – tanascius 2010-05-19 10:01:40