/// <summary> /// Функция запуска хранимых процедур или текстовых запросов. /// В процессе работы вызываются события QueryExecuteStartedEvent и QueryExecuteFinishedEvent /// </summary> /// <param name="CommandText">Текст команды или имя процедуры</param> /// <param name="CommandResultType">Тип возвращаемого результата</param> /// <param name="CommandType">Тип команды</param> /// <param name="ResultColumnName">Имя колонки с результатом</param> /// <param name="CommandTimeOut">Таймаут для команды (в секундах)</param> /// <returns>Структура с описанием результата</returns> public CommandResult ExecuteQuery(string CommandText, CommandResultTypes CommandResultType, CommandType CommandType, string ResultColumnName, int CommandTimeOut) { ExecuteQueryDelegate executeQueryDelegate = new ExecuteQueryDelegate(ExecuteQueryWork); /// Асинхронный запуск Запроса IAsyncResult ar = executeQueryDelegate.BeginInvoke( CommandText, CommandResultType, CommandType, ResultColumnName,CommandTimeOut, null, null); /// Событие: запрос начал исполнение if (QueryExecuteStartedEvent != null) { QueryExecuteStartedEvent(this, EventArgs.Empty); } /// Ожидание окончания CommandResult cr = executeQueryDelegate.EndInvoke(ar); /// Событие: запрос завершил выполнение if (QueryExecuteFinishedEvent != null) { QueryExecuteFinishedEvent(this, EventArgs.Empty); } return cr; }
/// <summary> /// Create new command result. /// </summary> /// <param name="Result">Human-readable description of the reason (if one can be provided), multiple languages can be provided.</param> /// <param name="Message">Result of the command request as sent by the charge point to the CPO.</param> public CommandResult(CommandResultTypes Result, IEnumerable <DisplayText> Message) { this.Result = Result; this.Message = Message?.Distinct() ?? new DisplayText[0]; }
/// <summary> /// Функция запуска хранимых процедур или текстовых запросов. /// /// ResultColumnName = "" /// CommandTimeout = 30; /// </summary> /// <param name="CommandText">Текст команды или имя процедуры</param> /// <param name="CommandResultType">Тип возвращаемого результата</param> /// <param name="CommandType">Тип команды</param> /// <returns></returns> public CommandResult ExecuteQuery(string CommandText, CommandResultTypes CommandResultType, CommandType CommandType) { return ExecuteQuery(CommandText, CommandResultType, CommandType, "", 30); }
/// <summary> /// Функция запуска хранимых процедур или текстовых запросов. /// /// ResultColumnName = "" /// </summary> /// <param name="CommandText">Текст команды или имя процедуры</param> /// <param name="CommandResultType">Тип возвращаемого результата</param> /// <param name="CommandType">Тип команды</param> /// <param name="CommandTimeOut">Таймаут для команды (в секундах)</param> /// <returns></returns> public CommandResult ExecuteQuery(string CommandText, CommandResultTypes CommandResultType, CommandType CommandType, int CommandTimeOut) { return ExecuteQuery(CommandText, CommandResultType, CommandType, "", CommandTimeOut); }
/// <summary> /// Основная рабочая функция. (Запускается асинхронно) /// </summary> /// <param name="CommandText"></param> /// <param name="CommandResultType"></param> /// <param name="CommandType"></param> /// <param name="ResultColumnName"></param> /// <param name="CommandTimeOut"></param> /// <returns></returns> private CommandResult ExecuteQueryWork(string CommandText, CommandResultTypes CommandResultType, CommandType CommandType, string ResultColumnName, int CommandTimeOut) { CommandResult result = new CommandResult(); try { SqlCommand cmd = new SqlCommand(); cmd.Connection = _connection.sqlConnection; cmd.CommandType = CommandType; cmd.CommandText = CommandText; cmd.CommandTimeout = CommandTimeOut; if (_parameters.GetParameters != null) { foreach (SqlParameter sp in _parameters.GetParameters) { cmd.Parameters.Add(sp); } } switch (CommandResultType) { case CommandResultTypes.None: { if (cmd.Connection.State == ConnectionState.Closed) cmd.Connection.Open(); cmd.ExecuteNonQuery(); cmd.Connection.Close(); } break; case CommandResultTypes.Table: { DataTable dtResult = new DataTable(); _adapter = new SqlDataAdapter(cmd); _adapter.Fill(dtResult); result.ResultObject = dtResult; } break; case CommandResultTypes.DataSet: { DataSet dsResult = new DataSet(); _adapter = new SqlDataAdapter(cmd); _adapter.Fill(dsResult); result.ResultObject = dsResult; } break; case CommandResultTypes.SingleValue: { DataTable dtResult = new DataTable(); _adapter = new SqlDataAdapter(cmd); _adapter.Fill(dtResult); result.ResultObject = dtResult.Rows[0][ResultColumnName].ToString(); } break; case CommandResultTypes.Adapter: { _adapter = new SqlDataAdapter(cmd); result.ResultObject = _adapter; } break; } result.isGood = true; } catch (Exception ex) { result.isGood = false; throw new Exception("Ошибка при выполнении команды БД", ex); } return result; }