| 
									
										
										
										
											2023-05-23 16:13:17 +08:00
										 |  |  | 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. | 
					
						
							|  |  |  |         private enumDbInstance instance; | 
					
						
							|  |  |  |         public Execution(enumDbInstance instance) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             this.instance = instance; | 
					
						
							|  |  |  |           //  _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); | 
					
						
							|  |  |  |             | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |           /* | 
					
						
							|  |  |  |         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(instance)) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     _sqlCmd.Connection = conn; | 
					
						
							|  |  |  |                     return _sqlCmd.ExecuteReader(CommandBehavior.CloseConnection); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 closeConnection(); | 
					
						
							|  |  |  |                 throw ex; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         public DataSet getData() | 
					
						
							|  |  |  |         {   | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             DataSet ds = new DataSet(); | 
					
						
							|  |  |  |             | 
					
						
							|  |  |  |             try | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | 
					
						
							|  |  |  |                 logSql(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |               | 
					
						
							|  |  |  |                 using (SqlConnection conn = new Connection().getSqlCon(instance)) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     _sqlCmd.Connection = conn; | 
					
						
							|  |  |  |                     using (SqlDataAdapter oda = new SqlDataAdapter(_sqlCmd)) | 
					
						
							|  |  |  |                     { | 
					
						
							|  |  |  |                         oda.Fill(ds); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }  | 
					
						
							|  |  |  |                 | 
					
						
							|  |  |  |                 | 
					
						
							|  |  |  |                 return ds; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             catch (Exception er) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 LogHelper.WriteLog(typeof(Execution), er); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                  throw er; | 
					
						
							|  |  |  |                // DataTable dt = new DataTable(); | 
					
						
							|  |  |  |                // ds.Tables.Add(dt); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             finally | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 closeConnection(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           //  return new DataSet(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         public int Execute() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             try | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 //HttpContext.Current.Session["currentSql"] = _sqlCmd.CommandText; | 
					
						
							|  |  |  |                 logSql(); | 
					
						
							|  |  |  |                 int affectRows = 0; | 
					
						
							|  |  |  |                 using (SqlConnection conn = new Connection().getSqlCon(instance)) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     _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(instance)) | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     _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(instance)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 _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(instance)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 _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(instance); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |           | 
					
						
							|  |  |  |         private void closeConnection() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             //if (_Conn != null && !isBatchExcute) | 
					
						
							|  |  |  |             //{  | 
					
						
							|  |  |  |             //    _Conn.Close(); | 
					
						
							|  |  |  |             //} | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private void logSql() | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2023-09-04 22:41:19 +08:00
										 |  |  |             if (!pickConstants.LOG_SQL_ON) | 
					
						
							| 
									
										
										
										
											2023-05-23 16:13:17 +08:00
										 |  |  |             { | 
					
						
							|  |  |  |                  return; | 
					
						
							|  |  |  |                //new DeiNiu.RequestLog().RecordLog(_sqlCmd); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             LogHelper.debug(typeof(Execution), _sqlCmd.CommandText); | 
					
						
							|  |  |  |             string parm = ""; | 
					
						
							|  |  |  |             foreach (SqlParameter sp in _sqlCmd.Parameters) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 parm += "; " + sp.ParameterName + " : " + sp.Value; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             LogHelper.debug(typeof(Execution), parm); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |