Tôi chắc chắn rằng câu hỏi này đã được trả lời, tuy nhiên tôi không thể tìm thấy câu trả lời bằng công cụ tìm kiếm.
Sử dụng c # Tôi muốn chạy tệp .sql. Tệp sql chứa nhiều câu lệnh sql, một số trong đó được chia nhỏ trên nhiều dòng. Tôi đã thử đọc tệp và thử thực thi tệp bằng ODP.NET ... tuy nhiên tôi không nghĩ ExecuteNonQuery thực sự được thiết kế để làm việc này.
Vì vậy, tôi đã thử sử dụng sqlplus thông qua việc sinh ra một quy trình ... tuy nhiên trừ khi tôi sinh ra quy trình với UseShellExecute được đặt thành sqlplus thực sẽ bị treo và không bao giờ thoát. Đây là mã KHÔNG LÀM VIỆC.
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "sqlplus";
p.StartInfo.Arguments = string.Format("xx/xx@{0} @{1}", in_database, s);
p.StartInfo.CreateNoWindow = true;
bool started = p.Start();
p.WaitForExit();
WaitForExit không bao giờ trả lại .... Trừ khi tôi đặt UseShellExecute thành true. Một tác dụng phụ của UseShellExecute là bạn không thể nắm bắt được đầu ra được chuyển hướng.