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