使用ASP.NET MVC更新数据库

问题描述 投票:1回答:1

我的数据库中有一个表,如下所示。

Create table Employee
(
  Id int Primary Key Identity(1,1),
  Name nvarchar(50),
  Gender nvarchar(10),
  City nvarchar(50),
  Salary decimal(18,2),
  DateOfBirth DateTime
)
GO
-- Insert some test data into Employee table
Insert into Employee values('Pranaya','Male','Mumbai',4000,'02/03/1977')
Insert into Employee values('Anurag','Male','Hyderabad',5000,'04/06/1979')
Insert into Employee values('Priyanka','Female','Bangalore',1000,'01/05/1979')
Insert into Employee values('Subrat','Male','Hyderabad',2000,'03/07/1981')
Insert into Employee values('Sudhanshu','Male','Mumbai',3000,'02/04/1978')
Insert into Employee values('Preety','Female','Bangalore',4000,'02/03/1974')
Insert into Employee values('Sandeep','Male','Hyderabad',5000,'04/06/1972')
Insert into Employee values('Sambit','Male','Bangalore',6000,'07/05/1975')
Insert into Employee values('Hina','Female','Mumbai',3000,'09/08/1976')
GO

然后我创建了一个存储过程来更新雇员

Create procedure spUpdateEmployee      
  @Id int,
  @Name nvarchar(50),      
  @Gender nvarchar (10),      
  @City nvarchar (50), 
  @Salary decimal(18,2),     
  @DateOfBirth DateTime 
as      
Begin      
  Update Employee Set
    Name = @Name,
    Gender = @Gender,
    City = @City,
    Salary = @Salary,
    DateOfBirth = @DateOfBirth
  Where   Id = @Id
End

我创建模范员工

 public class employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
        public decimal Salary { get; set; }
        public DateTime DateOfBirth { get; set; }
    }

我创建的EmployeeBusinessLayer类中包含了updateEmployee方法。

public class EmployeeBusinessLayer
{
public void UpdateEmployee(employee e)
        {
            string connectionStrings = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
            using (SqlConnection con =new SqlConnection(connectionStrings))
            {
                SqlCommand cmd = new SqlCommand("spUpdateEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter paId = new SqlParameter();
                paId.ParameterName = "@Id";
                paId.Value = e.ID;
                cmd.Parameters.Add(paId);

                SqlParameter paName= new SqlParameter();
                paId.ParameterName = "@Name";
                paId.Value = e.Name;
                cmd.Parameters.Add(paName);

                SqlParameter paGender = new SqlParameter();
                paId.ParameterName = "@Gender";
                paId.Value = e.Gender;
                cmd.Parameters.Add(paGender);

                SqlParameter paCity = new SqlParameter();
                paId.ParameterName = "@City";
                paId.Value = e.City;
                cmd.Parameters.Add(paCity);

                SqlParameter paSalary = new SqlParameter();
                paId.ParameterName = "@Salary";
                paId.Value = e.Salary;
                cmd.Parameters.Add(paSalary);

                SqlParameter paDate = new SqlParameter();
                paId.ParameterName = "@DateOfBirth";
                paId.Value = e.DateOfBirth;
                cmd.Parameters.Add(paDate);
                con.Open();
                cmd.ExecuteNonQuery();
            }

        }
}

当我在EmployeeController中创建编辑动作时,我确定以上都是真的。

[HttpGet]
        public ActionResult Edit(int id)
        {
            EmployeeBusinessLayer ebl = new EmployeeBusinessLayer();
            employee e = ebl.GetAllEmployess().FirstOrDefault(emp => emp.ID == id);
            return View(e);
        }



        [HttpPost]
        public ActionResult Edit(employee employee)
        {
            if (ModelState.IsValid)
            {
                EmployeeBusinessLayer employeeBusinessLayer = new EmployeeBusinessLayer();
                employeeBusinessLayer.UpdateEmployee(employee);
                return RedirectToAction("Index");
            }
            return View(employee);
        }

然后我在我的页面上得到错误信息。Procedure or function 'spUpdateEmployee' expects parameter '@Id', which was not supplied.

我只是通过主要的东西来显示我的问题,其余的我肯定很好.可以向我展示任何解决方案来解决这个错误吗?我使用Visual Studio 2019。

c# sql-server asp.net-mvc visual-studio-2019
1个回答
0
投票

你可以修改EmployeeBusinessLayer类中的UpdateEmployee方法,如下所示

public class EmployeeBusinessLayer
{
public void UpdateEmployee(employee e)
        {
            string connectionStrings = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
            using (SqlConnection con =new SqlConnection(connectionStrings))
            {
                SqlCommand cmd = new SqlCommand("spUpdateEmployee", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Id", e.ID);
                cmd.Parameters.AddWithValue("@Name", e.Name);
                cmd.Parameters.AddWithValue("@Gender", e.Gender);
                cmd.Parameters.AddWithValue("@City", e.City);
                cmd.Parameters.AddWithValue("@Salary", e.Salary);
                cmd.Parameters.AddWithValue("@DateOfBirth", e.DateOfBirth);
                con.Open();
                cmd.ExecuteNonQuery();
            }
        }
}

我对栈溢的第一个回答。希望对大家有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.