/// <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;
            }
Example #2
0
 /// <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;
            }