www.pudn.com > startprepare.rar > SQLPlusScript.cs
using System;
using System.IO;
using System.Collections;
using System.Threading;
using System.Diagnostics;
using System.Windows.Forms;
using DS.EMIS.StartPrepare.Common;
namespace DS.EMIS.StartPrepare
{
///
/// SQLPlusScript 的摘要说明。
///
public class SQLPlusScript
{
public SQLPlusScript()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region ### 进度条事件 ###
public delegate void ProcessEventHandler(int guage);
public event ProcessEventHandler ProcessEvent;
#endregion
///
/// 用sqlplus执行脚本
///
public string Execute(string sqlFileName)
{
try
{
Cursor.Current = Cursors.WaitCursor;
string batFileName = Path.Combine(Application.StartupPath,"tempSql.bat");
CreateBatFile(batFileName,sqlFileName);
Process p = new Process();
p.StartInfo.FileName = batFileName;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
// p.StartInfo.CreateNoWindow = false;
p.StartInfo.CreateNoWindow = true;
p.Start();
if(ProcessEvent != null )this.ProcessEvent(30);
p.StandardInput.WriteLine("quit");
string str = string.Empty;
//string str = p.StandardOutput.ReadToEnd();
while(p.StandardOutput.Peek()>=0)
{
str += p.StandardOutput.ReadToEnd();
}
p.StandardInput.WriteLine("exit");
if(ProcessEvent != null )this.ProcessEvent(50);
//p.WaitForExit();
while(p.StandardOutput.Peek()>=0)
{
str += p.StandardOutput.ReadToEnd();
}
if(ProcessEvent != null )this.ProcessEvent(100);
p.Close();
return str;
}
catch(Exception ex)
{
throw ex;
}
finally
{
Cursor.Current = Cursors.Default;
}
}
private void CreateBatFile(string batFileName,string sqlFileName)
{
using(StreamWriter writer = new StreamWriter(batFileName,false,System.Text.Encoding.Default))
{
//string str = string.Format("sqlplus {0}/{1}@{2} @{3} exit",GlobalObject.Instance.LocalSession.UserName,GlobalObject.Instance.LocalSession.Password,GlobalObject.Instance.LocalSession.ServiceName,sqlFileName);
string str = string.Format
(
"sqlplus {0}/{1}@{2} @{3} exit",
DBAccess.UserID,
DBAccess.UserPD,
DBAccess.ServiceName,
sqlFileName
);
writer.WriteLine(str);
writer.Close();
}
}
}
}