Я пытаюсь написать программу как компилятор. В этом случае я должен имитировать эти коды 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# для реализации, а также мой БД Oracle
Я не хочу близко sqlplus для каждого соединения времени, потому что требуется время для входа в систему.
Также мы можем заставить пользователя и передать как хххх/YYYYY к SQLPLUS. В этом случае, что такое идея ура? – Amir
Отправка не является проблемой, вы отправите новую строку после имени пользователя/пароля. Но получение - это ваша проблема. imho вы должны пойти с асинхронным решением, чтобы узнать, какой запрос был задан, и какие ответы вы получили – tanascius