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(); 
            } 
        } 
	} 
}