【问题标题】:'Data too long for column at row1' When data is 1 character'第 1 行的列的数据太长' 当数据为 1 个字符时
【发布时间】:2020-07-11 09:12:14
【问题描述】:

当我尝试将数据输入到表中的列中时,尽管我的数据为 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

【问题讨论】:

  • 这些值的长度都不小于四个字符。例如,'@Reg' 是 4 个字符的字符串文字 "@Reg",而不是包含 @Reg 参数内容的字符串。删除VALUES 列表中的撇号。
  • 跑题的 cmets: AddWithValue is Evil , carModel.NextServiceDate.ToString("yyyy-MM-dd hh:mm:ss") 存储为字符串的日期也是邪恶的
  • @Selvin 我怎样才能将 DateTime 转换为一个字符串,我可以在不使用这种东西的情况下将它放入 MySQL 数据库的查询中?
  • 当您将其作为参数传递时,将其作为DateTime 传递,而不是作为字符串传递。如果您传递 DateTimeAddWithValue 会将 MySqlDataType 属性设置为正确的枚举成员(即不要调用 ToString)。

标签: c# mysql asp.net asp.net-mvc asp.net-core


【解决方案1】:

感谢用户@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)";

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2020-01-07
    • 2020-03-04
    • 2018-12-01
    • 2018-10-19
    • 2022-11-26
    • 2016-06-07
    • 2017-01-17
    • 2017-01-30
    相关资源
    最近更新 更多