«Данные слишком длинные для столбца в строке 1» Когда данные имеют 1 символ - PullRequest
0 голосов
/ 31 марта 2020

Когда я пытаюсь ввести данные в столбец таблицы, появляется ошибка «Слишком длинные данные», несмотря на то, что мои данные состоят из 5 символов, а поле представляет собой varchar (8). Что бы мне нужно было изменить, чтобы это работало, поскольку, когда я добавляю часы к команде, длина символа составляет всего 5 символов.

Вот мой код команды:

[HttpPost]
    public IActionResult CreateCar(CarModel carModel)
    {
        if (ModelState.IsValid)
        {
            var connection = new MySqlConnection(Configuration.GetConnectionString("MySqlConnection"));
            var command =
                "INSERT INTO `tblcars` (`reg`, `make`, `model`, `colour`, `type`, `fueltype`, `regDate`, `lastService`, `nextService`, `mileage`, `status`) VALUES ('@Reg', '@Make', '@Model', '@Colour', '@Type', '@FuelType', '@RegDate', '@LastService', '@NextService', '@Mileage', '@Status')";
            var cmd = new MySqlCommand(command, connection);
            cmd.Parameters.AddWithValue("@Reg", carModel.Reg.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@Make", carModel.Make.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@Model", carModel.Model.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@Colour", carModel.Colour.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@Type", carModel.Type.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@FuelType", carModel.FuelType.ToUpper(new CultureInfo("en-GB", false)));
            cmd.Parameters.AddWithValue("@regDate", carModel.RegDate.ToString("yyyy-MM-dd hh:mm:ss"));
            cmd.Parameters.AddWithValue("@LastService", carModel.ServiceDate.ToString("yyyy-MM-dd hh:mm:ss"));
            cmd.Parameters.AddWithValue("@NextService", carModel.NextServiceDate.ToString("yyyy-MM-dd hh:mm:ss"));
            cmd.Parameters.AddWithValue("@Mileage", carModel.Mileage);
            cmd.Parameters.AddWithValue("@Status", carModel.Status);
            connection.Open();
            cmd.ExecuteNonQuery();
            connection.Dispose();
            cmd.Dispose();
            return RedirectToAction("CreateCarConfirmed");
        }

        return View();
    }

Вид настроен так, чтобы принимать только выпадающий выбор для поля, которое говорит, что слишком долго. Вот код представления (pastebin, поскольку он пытается отобразить HTML): https://pastebin.com/ijG8CG9j

1 Ответ

1 голос
/ 31 марта 2020

Благодаря комментарию пользователя @madreflection я обнаружил, что наличие символов 'вокруг параметров останавливает его замену на правильный параметр. Моя новая команда выглядит следующим образом:

var command =
            "INSERT INTO tblcars (reg, make, model, colour, type, fueltype, regDate, lastService, nextService, mileage, status) VALUES (@Reg, @Make, @Model, @Colour, @Type, @FuelType, @RegDate, @LastService, @NextService, @Mileage, @Status)";
...