예제 #1
0
    /// <summary>
    /// Gönderilen Sql Sorgusunu çalıştırıp istenilen türde (T) geri döndürür.
    /// </summary>
    /// <typeparam name="T">Geri Dönüş Tipi; NewsList, List NewsList>, DbNull, int, string, boolen, DateTime, Byte, Char, Array(int[], string[], boolen[],DataTime[]...)...</typeparam>
    /// <param name="SQLQuery">Çalıştırılacak Sql Sorgusu</param>
    /// <param name="CacheInSecond">Saniye cinsinden Cache Süresi, 0 gönderilirse Cache'e atmaz, Default değeri 0</param>
    /// <param name="cmdType">CommandType enum</param>
    /// <returns>T Türünü döndürür</returns>
    public T ExecuteQuery <T>(string SQLQuery, int CacheInSecond = 0, CommandType cmdType = CommandType.Text)
    {
        string CacheName = MemoryCache.GetMemoryCacheName(SQLQuery + "; " + cmdType + "; " + typeof(T), Parameters);

        if (CacheInSecond > 0 && MemoryCache.IsInMemoryCache(CacheName))
        {
            return((T)MemoryCache.GetMemoryCache(CacheName));
        }
        else
        {
            if (HttpContext.Current.Request.QueryString["DatacacheControl"] != null && HttpContext.Current.Request.QueryString["DatacacheControl"].ToString() == "1")
            {
                HttpContext.Current.Response.Write(SQLQuery);//CACHE OLMAYAN YER VAR MI KONTROLÜ
            }
            SqlCommand    cmd    = new SqlCommand();
            SqlConnection dbConn = new SqlConnection(GetSqlConnectionString(DatabaseType));
            cmd.Connection  = dbConn;
            cmd.CommandType = cmdType;
            cmd.CommandText = SQLQuery;
            if (Parameters != null)
            {
                cmd.Parameters.AddRange(Parameters.ToArray());
            }
            T ReturnObject = default(T);

            if (dbConn.State != ConnectionState.Open)
            {
                dbConn.Open();
            }
            #region FillReturnObject
            #region T>DBNULL
            if (typeof(T) == typeof(DBNull))
            {
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch
                {
                    string dsds = "ds";
                }
            }
            #endregion T>NULL
            #region T>NameSpace: "System"
            else if (typeof(T).Namespace == "System")
            {
                if (typeof(T).IsArray)
                {
                    SqlDataReader dr = cmd.ExecuteReader();
                    ReturnObject = dr.Ext_MappingToArray <T>();
                }
                else
                {
                    object ObjectReturn = cmd.ExecuteScalar();
                    if (ObjectReturn != null)
                    {
                        ReturnObject = (T)Convert.ChangeType(ObjectReturn, typeof(T));
                    }
                }
            }
            #endregion T>NameSpace: "System"
            #region T>Type:DataSet
            else if (typeof(T) == typeof(DataSet))
            {
                using (SqlDataAdapter DA = new SqlDataAdapter(cmd))
                {
                    DataSet DS = new DataSet();
                    DA.Fill(DS);
                    ReturnObject = (T)Convert.ChangeType(DS, typeof(T));
                }
            }
            #endregion T>Type:DataSet
            #region T>Type:DataTable
            else if (typeof(T) == typeof(DataTable))
            {
                using (SqlDataAdapter DA = new SqlDataAdapter(cmd))
                {
                    DataTable DT = new DataTable();
                    DA.Fill(DT);
                    ReturnObject = (T)Convert.ChangeType(DT, typeof(T));
                }
            }
            #endregion T>Type:DataTable
            #region T>Type:DataRow
            else if (typeof(T) == typeof(DataRow))
            {
                using (SqlDataAdapter DA = new SqlDataAdapter(cmd))
                {
                    DataTable DT = new DataTable();
                    DA.Fill(DT);
                    if (DT.Rows.Count > 0)
                    {
                        ReturnObject = (T)Convert.ChangeType(DT.Rows[0], typeof(T));
                    }
                }
            }
            #endregion T>Type:DataRow
            #region T>Type:DataColumn
            else if (typeof(T) == typeof(DataColumn))
            {
                using (SqlDataAdapter DA = new SqlDataAdapter(cmd))
                {
                    DataTable DT = new DataTable();
                    DA.Fill(DT);
                    if (DT.Rows.Count > 0)
                    {
                        ReturnObject = (T)Convert.ChangeType(DT.Rows[0][0], typeof(T));
                    }
                }
            }
            #endregion T>Type:DataColumn
            #region T>Type:EntityObject
            else if (typeof(T).IsClass)
            {
                SqlDataReader dr = cmd.ExecuteReader();
                ReturnObject = dr.Ext_MappingToEntityObject <T>();
            }
            #endregion T>Type:EntityObject
            #endregion FillReturnObject
            dbConn.Close();
            cmd.Parameters.Clear();
            cmd.Connection.Close();
            cmd.Connection.Dispose();
            cmd.Dispose();
            dbConn.Dispose();
            if (CacheInSecond > 0)
            {
                MemoryCache.AddMemoryCache(ReturnObject, CacheName, CacheInSecond);
            }
            return(ReturnObject);
        }
    }