263 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			263 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | ||
|  | using System.Collections.Generic; | ||
|  | using System.Text; | ||
|  | using System.Data; | ||
|  | using System.Data.OleDb; | ||
|  | //using Oracle.DataAccess.Client; | ||
|  | using System.Data.SqlClient; | ||
|  | using System.Web; | ||
|  | using DeiNiu.Utils; | ||
|  | //using DeiNiu.Data.DataAccess; | ||
|  | namespace DeiNiu.Data.BaseObject | ||
|  | { | ||
|  |     [Serializable] | ||
|  |     public class Execution : IDisposable | ||
|  |     { | ||
|  |           | ||
|  | 
 | ||
|  |         private String _Sql = null; | ||
|  |       //  private SqlConnection _Conn = null; | ||
|  |         private SqlCommand _sqlCmd = null;  | ||
|  |         static bool isSqlLog = false; // System.Configuration.ConfigurationManager.AppSettings["SqlLog"].Equals("On"); | ||
|  |         private bool isBatchExcute; // true: not to handle connection close. | ||
|  |         public Execution() | ||
|  |         { | ||
|  |           //  _Conn = new Connection().getSqlCon(); | ||
|  |             _sqlCmd = new SqlCommand(); | ||
|  |           //  _sqlCmd.Connection = _Conn; | ||
|  |              | ||
|  |         } | ||
|  | 
 | ||
|  |         public Execution(SqlConnection conn) | ||
|  |         { | ||
|  |          //   _Conn = conn == null ? new Connection().getSqlCon() : conn; | ||
|  |             _sqlCmd = new SqlCommand(); | ||
|  |         //    _sqlCmd.Connection = _Conn; | ||
|  |               | ||
|  |             isBatchExcute = conn != null; | ||
|  |         } | ||
|  |       | ||
|  |         public Execution(String Sql) | ||
|  |         { | ||
|  |             _Sql = Sql; | ||
|  |          //   _Conn = new Connection().getSqlCon(); | ||
|  |             _sqlCmd = new SqlCommand(_Sql); | ||
|  |         //  _sqlCmd = new SqlCommand(_Sql, _Conn); | ||
|  |             | ||
|  | 
 | ||
|  |         } | ||
|  |         /* | ||
|  |         public Execution(String Sql, SqlConnection Conn) | ||
|  |         { | ||
|  |             _Sql = Sql; | ||
|  |           //  _Conn = Conn; | ||
|  |             _sqlCmd = new SqlCommand(_Sql, _Conn); | ||
|  |              | ||
|  |         } | ||
|  |          * */ | ||
|  |          | ||
|  | 
 | ||
|  |         public SqlCommand SqlCmd | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 return _sqlCmd; | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  | 
 | ||
|  |         public SqlDataReader GetDataReader() | ||
|  |         { | ||
|  |             try | ||
|  |             { | ||
|  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  |                 logSql(); | ||
|  |                 using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |                 { | ||
|  |                     _sqlCmd.Connection = conn; | ||
|  |                     return _sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); | ||
|  |                 } | ||
|  | 
 | ||
|  | 
 | ||
|  |             } | ||
|  |             catch (Exception ex) | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |                 throw ex; | ||
|  |             } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         } | ||
|  |         public DataSet getData() | ||
|  |         { | ||
|  |             try | ||
|  |             { | ||
|  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  |                 logSql(); | ||
|  | 
 | ||
|  |                 DataSet ds = new DataSet(); | ||
|  |                 using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |                 { | ||
|  |                     _sqlCmd.Connection = conn; | ||
|  |                     using (SqlDataAdapter oda = new SqlDataAdapter(_sqlCmd)) | ||
|  |                     { | ||
|  |                         oda.Fill(ds); | ||
|  | 
 | ||
|  |                     } | ||
|  |                 } | ||
|  | 
 | ||
|  |                 | ||
|  | 
 | ||
|  |                 closeConnection(); | ||
|  |                 return ds; | ||
|  |             } | ||
|  |             catch (Exception er) | ||
|  |             { | ||
|  |                 throw er; | ||
|  |             } | ||
|  |             finally | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         public int Execute() | ||
|  |         { | ||
|  |             try | ||
|  |             { | ||
|  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  |                 logSql(); | ||
|  |                 int affectRows = 0; | ||
|  |                 using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |                 { | ||
|  |                     _sqlCmd.Connection = conn; | ||
|  |                     affectRows = _sqlCmd.ExecuteNonQuery(); | ||
|  |                 } | ||
|  |                   | ||
|  |                 //       _Conn.Close(); | ||
|  |                 return affectRows; | ||
|  |             } | ||
|  |             catch (Exception ex) | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |                 throw ex; | ||
|  |             } | ||
|  |             finally | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public int Execute(bool returnPk) | ||
|  |         { | ||
|  |             logSql(); | ||
|  |             if (!returnPk)// || isBatchExcute) | ||
|  |                 return Execute(); | ||
|  |             try | ||
|  |             { | ||
|  |                 //int rt = Execute(); | ||
|  |                 int autoPk; | ||
|  |                 using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |                 { | ||
|  |                     _sqlCmd.Connection = conn; | ||
|  |                     _sqlCmd.CommandText += "; select scope_identity() as [scope_identity]";   //   scope_identity need to be execute in the same range scope.// set   nocount   on; | ||
|  |                     //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  | 
 | ||
|  |                     autoPk = Convert.ToInt32(_sqlCmd.ExecuteScalar()); //ExecuteNonQuery(); | ||
|  | 
 | ||
|  |                 } | ||
|  |   | ||
|  |                 return autoPk; | ||
|  | 
 | ||
|  |             } | ||
|  |             catch (Exception ex) | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |                 throw ex; | ||
|  |             } | ||
|  |             finally | ||
|  |             { | ||
|  |                 closeConnection(); | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         /*  this is obsolete for it won't return expected auto increasement value. the return value is always 0. | ||
|  |         int getMssqlIncreamentIntPk() | ||
|  |         { | ||
|  |         	  String strSql = "select Scope_Identity()"; | ||
|  |             return getInt(strSql); | ||
|  |         } | ||
|  |         */ | ||
|  |         int getInt(String strSql) | ||
|  |         {  | ||
|  |             using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |             { | ||
|  |                 _sqlCmd.Connection = conn; | ||
|  |                 _sqlCmd.CommandText = strSql; | ||
|  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  |                 return Convert.ToInt32(_sqlCmd.ExecuteScalar()); | ||
|  |                 //   return 1; | ||
|  |             } | ||
|  |         } | ||
|  |         string getString(string sql) | ||
|  |         { | ||
|  |             using (SqlConnection conn = new Connection().getSqlCon()) | ||
|  |             { | ||
|  |                 _sqlCmd.Connection = conn; | ||
|  |                 _sqlCmd.CommandText = sql; | ||
|  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | ||
|  |                 return _sqlCmd.ExecuteScalar().ToString(); | ||
|  |             } | ||
|  |         } | ||
|  |         public int getNextSeqValue(String SequenceName) | ||
|  |         { | ||
|  |             String strSql = "SELECT NEXT VALUE FOR " + SequenceName; //TableSequenceID ";// "SELECT " + SequenceName + ".nextval from dual"; | ||
|  |             return getInt(strSql); | ||
|  | 
 | ||
|  |         } | ||
|  | 
 | ||
|  |         public string getDateTime() | ||
|  |         { | ||
|  |             String strSql = "SELECT getdate() "; //TableSequenceID ";// "SELECT " + SequenceName + ".nextval from dual"; | ||
|  |             return getString(strSql); | ||
|  | 
 | ||
|  |         } | ||
|  | 
 | ||
|  |         public void Dispose() | ||
|  |         { | ||
|  | 
 | ||
|  |         } | ||
|  |         public SqlConnection getConn | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 //if (_Conn == null) | ||
|  |                 //{ | ||
|  |                 //    _Conn = new Connection().getSqlCon(); | ||
|  |                 //} | ||
|  | 
 | ||
|  |                 //return _Conn; | ||
|  |                 return new Connection().getSqlCon(); | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |           | ||
|  |         private void closeConnection() | ||
|  |         { | ||
|  |             //if (_Conn != null && !isBatchExcute) | ||
|  |             //{  | ||
|  |             //    _Conn.Close(); | ||
|  |             //} | ||
|  |         } | ||
|  | 
 | ||
|  |         private void logSql() | ||
|  |         { | ||
|  |             if (isSqlLog) | ||
|  |             { | ||
|  |                new DeiNiu.RequestLog().RecordLog(_sqlCmd); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | } |