【发布时间】: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传递,而不是作为字符串传递。如果您传递DateTime,AddWithValue会将MySqlDataType属性设置为正确的枚举成员(即不要调用ToString)。
标签: c# mysql asp.net asp.net-mvc asp.net-core