Пример #1
0
        /// <summary>
        /// Запрос на полчение скалярной переменной.
        /// </summary>
        /// <param name="query">Форматированный запрос как через String.Format</param>
        /// <param name="param">Параметры подстанавливаемые в запросю</param>
        /// <returns></returns>
        public ScalarResult <T> GetScalar <T>(bool cacheNull, params object[] param)
        {
            ScalarResult <T> result = null;

            StringBuilder hashBuilder = new StringBuilder();

            for (int i = 0; i < param.Length; i++)
            {
                hashBuilder.Append(param[i]);
                hashBuilder.Append('_');
            }
            string paramStr = hashBuilder.ToString();

            if (!cache.TryGetValue(paramStr, out result))
            {
                string query = string.Format(queryTemplate, param);
                result = adapter.SelectScalar <T>(query);

                if (cacheNull)
                {
                    cache.Set(paramStr, result, entryOptions);
                }
                else if (result != null)
                {
                    cache.Set(paramStr, result, entryOptions);
                }
            }

            return(result);
        }
Пример #2
0
        public ScalarResult <T> SelectScalar <T>(string query, int timeOut = -1)
        {
            ScalarResult <T> result = null;
            int _timeOut            = timeOut >= 0 ? timeOut : DefaultTimeOut;

            result = _Execute(query, true, (connection) =>
            {
                using (MySqlCommand command = new MySqlCommand(query, connection))
                {
                    command.CommandTimeout = _timeOut;

                    object queryResult = command.ExecuteScalar();
                    var tmp            = new ScalarResult <T>()
                    {
                        Value = default(T)
                    };

                    if (!Convert.IsDBNull(queryResult) && queryResult != null)
                    {
                        var convertType = typeof(T);
                        tmp.Value       = (T)Convert.ChangeType(queryResult, convertType);
                    }
                    else
                    {
                        tmp.DbNull = true;
                    }

                    return(tmp);
                }
            });

            return(result);
        }
Пример #3
0
        /// <summary>
        /// Выполняет запрос и возвращает данные в виде экземпляра <see cref="ScalarResult{T}"/>.
        /// </summary>
        /// <param name="query">SQL запрос.</param>
        /// <param name="timeOut">Таймаут выполнения SQL запроса.</param>
        /// <param name="retryOnError">Повторять выполнение запроса при возникновении ошибки.</param>
        /// <returns>Строка или null в случае ошибки выполнения запроса.</returns>
        public ScalarResult <T> SelectScalar <T>(string query, int?timeOut, bool?retryOnError)
        {
            ScalarResult <T> result = null;

            QueryContext context = new QueryContext()
            {
                Query          = query,
                Retry          = retryOnError.HasValue ? retryOnError.Value : RetryOnError,
                CommandTimeOut = timeOut.HasValue ? timeOut.Value : DefaultTimeOut
            };

            result = _Execute(context, (connection, commandTimeOut) =>
            {
                using (MySqlCommand command = new MySqlCommand(query, connection))
                {
                    //Если значение таймаута больше или равно нулю - то это значение берем из текущего вызова функции
                    command.CommandTimeout = commandTimeOut;

                    object queryResult = command.ExecuteScalar();
                    var tmp            = new ScalarResult <T>()
                    {
                        Value = default
                    };

                    if (!Convert.IsDBNull(queryResult) && queryResult != null)
                    {
                        var convertType = typeof(T);
                        tmp.Value       = (T)Convert.ChangeType(queryResult, convertType);
                    }
                    else
                    {
                        tmp.DbNull = true;
                    }

                    return(tmp);
                }
            });

            return(result);
        }