简体   繁体   English

使用 ASP.NET MVC 更新数据库

[英]Update database using ASP.NET MVC

I have a table in my database as the following:我的数据库中有一个表,如下所示:

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

then I create a store procedure to update employee然后我创建一个存储过程来更新员工

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

I create model employee我创建 model 员工

 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; }
    }

I create class EmployeeBusinessLayer contain method updateEmployee我创建 class 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();
            }

        }
}

I am sure the above are true.我确信以上是真的。 When I create Edit action in EmployeeController当我在 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);
        }

then i get error from my page: Procedure or function 'spUpdateEmployee' expects parameter '@Id', which was not supplied.然后我从我的页面收到错误:过程或 function 'spUpdateEmployee' 需要参数'@Id',但未提供。

I just show my problem by the main things and the rest I am sure fine.我只是通过主要内容和 rest 来展示我的问题,我确定没问题。 Can show me any solution to fix that error?可以告诉我解决该错误的任何解决方案吗? I used Visual Studio 2019.我使用了 Visual Studio 2019。

You can modify the UpdateEmployee method in EmployeeBusinessLayer class as follows您可以修改 EmployeeBusinessLayer class 中的 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();
            }
        }
}

My first answer on stack overflow.我对堆栈溢出的第一个答案。 Hope it helps.希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM