【问题标题】:Data from viewmodel doesn't go into database C# MVC来自 viewmodel 的数据不会进入数据库 C# MVC
【发布时间】:2019-11-10 17:18:01
【问题描述】:

参数中的模型的值一直到查询所在的 DAL 方法,但不知何故,数据库中没有任何变化。有人知道为什么吗?也没有发生错误。 Controller:

public ActionResult AddCar(CarModel car)
{
        if(ModelState.IsValid)
        {
            u.AddCar(new DTO.CarDTO(car.Color, car.Type, car.NumberOfSeats, car.Price, car.MaxKilometres, car.Addition, car.ModelID, car.License_Plate, car.Fueltype, car.ReservationStatus));
            return RedirectToAction("Index", "Home");
        }
        return View();
}

Logic:

public void AddCar(CarDTO c)
{
    carDAL.AddCar(new CarDTO(c.Color, c.Type, c.NumberOfSeats, c.Price, c.MaxKilometres, c.Addition, c.ModelID, c.License_Plate, c.Fueltype, c.ReservationStatus));
}

Interface layer:

public interface ICarDAL<CarDTO>
{
    public void AddCar(CarDTO c) { }
}

DAL,类确实有连接字符串:

public void AddCar(CarDTO c)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        string query = "INSERT INTO [dbo].[Car](Price, Addition, License_Plate, MaxKm, Type, Color, NumberOfSeats, Fueltype, reservationStatus, ModelID) " +
            "VALUES(@Price, @Addition, '@LicensePlate', @MaxKm, '@Type', '@Color', @NumberOfSeats, @FuelType, @Reserved, @ModelID)";

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@Price", c.Price);
            cmd.Parameters.AddWithValue("@Addition", c.Addition);
            cmd.Parameters.AddWithValue("@LicensePlate", c.License_Plate);
            cmd.Parameters.AddWithValue("@MaxKm", c.MaxKilometres);
            cmd.Parameters.AddWithValue("@Type", c.Type);
            cmd.Parameters.AddWithValue("@Color", c.Color);
            cmd.Parameters.AddWithValue("@NumberOfSeats", c.NumberOfSeats);
            cmd.Parameters.AddWithValue("@FuelType", c.Fueltype);
            cmd.Parameters.AddWithValue("@ReservationStatus", c.ReservationStatus);
            cmd.Parameters.AddWithValue("@ModelID", c.ModelID);
        }
    }
}

找到错误但我仍然不知道如何修复它: https://imgur.com/xjKIqED

解决方案:首先我需要使用ExecuteNonQuery() 来使查询实际执行某些操作...我认为SqlCommand 已经为您执行了它。其次,我的密码由 ************ 组成,我认为这无关紧要,但我想确实如此。

【问题讨论】:

  • 您没有执行命令。所以cmd.ExecuteNonQuery(); 在分配你的参数之后会起作用。另请注意,使用Add 并指定数据类型not AddWithValue,因为这些值将被推断出来,可能不是您需要的。
  • @Çöđěxěŕ 所以我将该代码放在 cmd 中使用,所以就在最后一个 cmd.Parameters.AddWithValue(); 下方。但现在我得到'ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为关闭。'
  • 附言。 ADO.NET 是您可以从 .NET 程序连接到数据库的方法之一。因此,您可以将其用作 asp.net 应用程序的一部分,或者桌面应用程序或控制台应用程序的一部分,或其他任何东西。
  • 没有。这完全无关紧要。你试过用谷歌搜索你的错误信息吗?该站点以及其他站点上之前有几个关于该错误的问题。例如this onethis one 和其他几个人都有很多可能与您的情况相关的有用建议。请进行一些搜索并尝试可能的解决方案。
  • @ADyson 我真诚地感谢你帮助我。如果我不使用ExecuteNonQuery(),我不知道查询不会执行。问题还在于我的密码仅包含 ********* 而不是实际密码,但感谢您的帮助:D

标签: c# sql asp.net-mvc


【解决方案1】:
public void AddCar(CarDTO c)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        if (con.State==ConnectionState.Closed)
            {                      
                con.Open();   
             }
         [Your code]
         con.Close();
    }
 }

【讨论】:

  • 它说“SqlException: Login failed for user 'mydatabase'”
  • 检查您的连接字符串是否正确。
  • 并检查您的用户是否可以访问您的数据库
【解决方案2】:

您可能需要使用“保存”功能,我在您的代码中没有看到实际执行 SQL 命令的任何地方,我看到它正在构建,但我过去曾使用过类似的东西cmd.Execute()

【讨论】:

  • 我没有投反对票,所以我不知道。抱歉,您如何查看是否使用实体框架?
  • 所以你说的是using (SqlCommand cmd = new SqlCommand(query, con)) 不会执行查询?我以为会...
  • 不知道其他人,但我对此投了反对票,因为从代码中不言而喻,它没有使用实体框架
  • 感谢您告诉我,我编辑了我的回复。我认为我的回答是适用的,没有 Execute 函数就不会执行实际的 SQL 命令。
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多