示例#1
0
        /// <summary>
        /// Удалить задание
        /// </summary>
        /// <param name="task">Задание</param>
        /// <returns></returns>
        public static object DeleteTask(TrainSQL_DAL.Task task = null)
        {
            object result = null;

            if (task != null)
            {
                try
                {
                    using (var context = new TrainSQL_Entities())
                    {
                        var delTask = context.Tasks.FirstOrDefault(x => x.TaskID == task.TaskID);
                        if (delTask != null)
                        {
                            context.Tasks.Remove(delTask);
                        }


                        context.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    result = ex;
                }
            }

            return(result);
        }
示例#2
0
        /// <summary>
        /// Получить задание по ID
        /// </summary>
        /// <param name="taskID">ID задания</param>
        /// <returns></returns>
        public static TrainSQL_DAL.Task GetTaskByID(int taskID = 0)
        {
            TrainSQL_DAL.Task task = null;
            if (taskID != 0)
            {
                try
                {
                    using (var context = new TrainSQL_Entities())
                    {
                        task = context.Tasks.FirstOrDefault(x => x.TaskID == taskID);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            return(task);
        }
示例#3
0
        /// <summary>
        /// Получить список случайных заданий для теста
        /// </summary>
        /// <param name="count">Кол-во заданий в тесте</param>
        /// <returns></returns>
        public static List <TrainSQL_DAL.Task> GetTestList(int count = 0)
        {
            List <TrainSQL_DAL.Task> result = null;

            if (count > 0)
            {
                result = new List <TrainSQL_DAL.Task>();
                try
                {
                    using (var context = new TrainSQL_Entities())
                    {
                        // Случайный номер задания
                        int rand = new Random().Next(context.Tasks.ToList().Count());
                        // Само задание
                        TrainSQL_DAL.Task task = context.Tasks.ToList()[rand];
                        // Добавить задание в список заданий
                        result.Add(task);

                        while (result.Count < 5)
                        {
                            // Получить новое задание
                            rand = new Random().Next(context.Tasks.ToList().Count());
                            task = context.Tasks.ToList()[rand];

                            // Если задания нет в списке, то добавить
                            if (!result.Contains(task))
                            {
                                result.Add(task);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            return(result);
        }
示例#4
0
        /// <summary>
        /// Редактировать/Добавить задание
        /// </summary>
        /// <param name="newTask">Задание</param>
        /// <returns></returns>
        public static object EditORAddTask(TrainSQL_DAL.Task newTask = null)
        {
            object res = null;

            if (newTask != null)
            {
                try
                {
                    using (var context = new TrainSQL_Entities())
                    {
                        if (IsTaskExists(newTask.TaskID))
                        {
                            context.Tasks.FirstOrDefault(x => x.TaskID == newTask.TaskID).TaskText    = newTask.TaskText;
                            context.Tasks.FirstOrDefault(x => x.TaskID == newTask.TaskID).RightAnswer = newTask.RightAnswer;
                            context.Tasks.FirstOrDefault(x => x.TaskID == newTask.TaskID).dbID        = newTask.dbID;
                        }
                        else
                        {
                            context.Tasks.Add(new TrainSQL_DAL.Task()
                            {
                                TaskText    = newTask.TaskText,
                                RightAnswer = newTask.RightAnswer,
                                dbID        = newTask.dbID
                            });
                        }
                        context.SaveChanges();
                    }
                }
                catch (Exception ex)
                {
                    res = ex;
                    MessageBox.Show(ex.ToString());
                }
            }

            return(res);
        }
示例#5
0
        /// <summary>
        /// Проверка запроса пользователя с ожидаемым
        /// </summary>
        /// <param name="userQuery"></param>
        /// <param name="task"></param>
        /// <returns></returns>
        public static object IsCorrectQuery(string userQuery, TrainSQL_DAL.Task task)
        {
            object res = null;

            string rightQuery = task.RightAnswer.ToLower().Trim();

            userQuery = userQuery.ToLower().Trim();
            List <string> testDBList      = new List <string>(); // Список имён тестовых БД
            bool          isInsert        = rightQuery.Contains("insert");
            bool          isUpdate        = rightQuery.Contains("update");
            bool          isDelete        = rightQuery.Contains("delete");
            bool          isChangingQuery = isInsert || isUpdate || isDelete;
            string        mainDB          = null; // название БД, по которой строится DataTable
            DataTable     resultTable     = null; // DataTable для вывода
            string        error           = null; // Сообщение об ошибке

            if (userQuery.Length != 0)
            {
                // Заполнение списка
                try
                {
                    using (var context = new TrainSQL_Entities())
                    {
                        int shemeID = context.TestDatabases.FirstOrDefault(x => x.dbID == task.dbID).ShemeID;
                        testDBList = (from x in context.TestDatabases
                                      where x.ShemeID == shemeID
                                      select x.dbName).ToList();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

                if (testDBList == null || testDBList.Count == 0)
                {
                    return(null);
                }
                mainDB = testDBList.FirstOrDefault(x => !char.IsDigit(x.Last())); // получение названия БД для вывода

                if (mainDB != null)
                {
                    DataTable userTable  = new DataTable();
                    DataTable rightTable = new DataTable();

                    connectionBuilder.InitialCatalog = mainDB;
                    try
                    {
                        using (SqlConnection connection = new SqlConnection(connectionBuilder.ConnectionString))
                        {
                            connection.Open();

                            // Получить таблицу вывода
                            resultTable = GetDataTable(userQuery, connection);
                            // Получить ожидаемую тублицу
                            rightTable = GetDataTable(rightQuery, connection);

                            if (isChangingQuery)
                            {
                                SqlTransaction transaction = connection.BeginTransaction();
                                string         tbName      = "";
                                SqlCommand     command;

                                command             = new SqlCommand(userQuery, connection);
                                command.Transaction = transaction;

                                if (userQuery.Contains("insert") ||
                                    userQuery.Contains("update") ||
                                    userQuery.Contains("delete"))
                                {
                                    command.ExecuteNonQuery();
                                }

                                tbName              = GetTableName(rightQuery.ToLower());
                                command             = new SqlCommand($"SELECT * FROM {tbName}", connection);
                                command.Transaction = transaction;

                                SqlDataReader reader = command.ExecuteReader();
                                userTable.Load(reader);
                                reader.Close();

                                transaction.Rollback();
                            }
                            else
                            {
                                userTable = resultTable;
                            }

                            error = AreTablesTheSame(userTable, rightTable);

                            connection.Close();
                        }

                        if (error != null)
                        {
                            if (isInsert)
                            {
                                error = "Операция \"insert\" выполнена неверно или вовсе не выполнена";
                            }
                            else if (isUpdate)
                            {
                                error = "Операция \"update\" выполнена неверно или вовсе не выполнена";
                            }
                            else if (isDelete)
                            {
                                error = "Операция \"delete\" выполнена неверно или вовсе не выполнена";
                            }
                        }
                        else
                        {
                            if (!isChangingQuery)
                            {
                                int i = 1;
                                for (; i < testDBList.Count() && error == null; i++)
                                {
                                    error = CheckQuery(userQuery, rightQuery, testDBList[i]);
                                }

                                if (error != null)
                                {
                                    error = $"Запрос не прошёл проверку на {i + 1} базе данных";
                                }
                            }
                        }
                    }
                    catch (ObjectDisposedException ex)
                    {
                        error = "Попытка выполнить оперции над удалённым объектом (ObjectDisposedException)!\n" + ex.Message;
                    }
                    catch (InvalidCastException ex)
                    {
                        error = "Недопустимое приведение/преобразование (InvalidCastException)!\n" + ex.Message;
                    }
                    catch (SqlException ex)
                    {
                        error = "Ошибка SQL!\n" + ex.Message;
                    }
                    catch (InvalidOperationException ex)
                    {
                        error = "Состояние объекта блокирует вызов метода (InvalidOperationException)!\n" + ex.Message;
                    }
                    catch (Exception ex)
                    {
                        error = "Ошибка dремени выполнения!" + ex.Message;
                    }
                }
            }

            res = new object[] { resultTable, error };


            return(res);
        }