Обновить записи клиентов - PullRequest
0 голосов
/ 01 мая 2020

В моем приложении есть действие по обновлению для обновления записей о клиентах в серверной части. Кроме того, насколько я знаю, он должен сохранять любые обновления или не (ноль), когда одно поле не было изменено. Однако, когда я пытаюсь нажать «Сохранить», я получаю ошибку sql, что «MobileNumber» не был предоставлен.

Вот мой класс уровня данных:

 #region Update rider's info
        public bool updateRiders(RidersModel rider)
        {


            query = "UPDATE Users SET firstName = @firstName," +
                    " lastName = @lastName, email = @email, Address = @Address," +
                    " MobileNumber = @MobileNumber, city = @city," +
                    "state = @state, zipCode = @zipCode, UserName =@UserName, users_Id = @users_Id  " +
                    "WHERE usersId = @ID;";

            conn = new SqlConnection(connectionString);
            cmd = new SqlCommand(query, conn);

            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = rider.usersId;
            cmd.Parameters.Add("@firstName", SqlDbType.VarChar, 255).Value = rider.firstName;
            cmd.Parameters.Add("@lastName", SqlDbType.VarChar, 255).Value = rider.lastName;
            cmd.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = rider.email;
            cmd.Parameters.Add("@Address", SqlDbType.VarChar, 255).Value = rider.Address;
            cmd.Parameters.Add("@city", SqlDbType.VarChar, 255).Value = rider.city;
            cmd.Parameters.Add("@state", SqlDbType.VarChar, 255).Value = rider.state;
            cmd.Parameters.Add("@zipCode", SqlDbType.Int).Value = rider.zipCode;
            cmd.Parameters.Add("@MobileNumber", SqlDbType.VarChar, 200).Value = rider.mobileNumber;
            cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 256).Value = rider.UserName;
            cmd.Parameters.Add("@users_Id", SqlDbType.NVarChar, 128).Value = rider.userID;


            try
            {
                conn.Open();
                rows = cmd.ExecuteNonQuery();
                if (rows > 0)
                {
                    success = true;
                }

            }
            catch (SqlException ex)
            {

                throw new Exception(ex.Message);

            }
            finally
            {
                conn.Close();
            }

            return success;

        }

Мое действие выглядит следующим образом:

 [HttpGet]
        public async Task<ActionResult> EditRiders(int id)
        {
            var userStore = new UserStore<IdentityUser>();
            var userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new RidesDbContext()));

            IdentityUser theUser = new IdentityUser();
            theUser = await userManager.FindByIdAsync(User.Identity.GetUserId());

            RidersModel rider = new RidersModel();
            RidersTier tier = new RidersTier();
            rider.email = theUser.UserName;
            rider.email = theUser.Email;
            rider.mobileNumber = theUser.PhoneNumber;
            rider.Password = theUser.PasswordHash;
            rider.userID = theUser.Id;



            rider = tier.getRidersById(id);



            return View(rider);
        }


        [HttpPost]
        public async Task<ActionResult> EditRiders(RidersModel rider)
        {

            var userStore = new UserStore<IdentityUser>();
            var userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new RidesDbContext()));

            IdentityUser theUser = new IdentityUser();



            if (ModelState.IsValid)
            {
                theUser = await userManager.FindByIdAsync(User.Identity.GetUserId());

                rider.email = theUser.UserName;
                rider.email = theUser.Email;
                rider.mobileNumber = theUser.PhoneNumber;
                rider.Password = theUser.PasswordHash;
                rider.userID = theUser.Id;

                RidersTier tier = new RidersTier();
                tier.updateRiders(rider);
            }



            TempData["ad"] = "User info has been updated";

            return View(rider);
        }

Есть ли для этого какая-либо причина?

Буду признателен за вашу помощь. Спасибо.

1 Ответ

1 голос
/ 01 мая 2020

Я думаю, что вы должны предоставить переменные параметров в том порядке, в котором они появляются в операторе sql. Я думаю, что @ID в порядке, так как это в предложении where, но я не уверен. Попробуйте, если это не сработает, тогда поставьте параметр @ID последним:

query = @"
    UPDATE Users 
    SET 
        firstName = @firstName,
        lastName = @lastName, 
        email = @email, 
        Address = @Address,
        MobileNumber = @MobileNumber, 
        city = @city,
        state = @state, 
        zipCode = @zipCode, 
        UserName = @UserName, 
        users_Id = @users_Id  
    WHERE usersId = @ID;
";

conn = new SqlConnection(connectionString);
cmd = new SqlCommand(query, conn);

cmd.Parameters.Add("@ID", SqlDbType.Int).Value = rider.usersId;
cmd.Parameters.Add("@firstName", SqlDbType.VarChar, 255).Value = rider.firstName;
cmd.Parameters.Add("@lastName", SqlDbType.VarChar, 255).Value = rider.lastName;
cmd.Parameters.Add("@email", SqlDbType.VarChar, 255).Value = rider.email;
cmd.Parameters.Add("@Address", SqlDbType.VarChar, 255).Value = rider.Address;
cmd.Parameters.Add("@MobileNumber", SqlDbType.VarChar, 200).Value = rider.mobileNumber;
cmd.Parameters.Add("@city", SqlDbType.VarChar, 255).Value = rider.city;
cmd.Parameters.Add("@state", SqlDbType.VarChar, 255).Value = rider.state;
cmd.Parameters.Add("@zipCode", SqlDbType.Int).Value = rider.zipCode;
cmd.Parameters.Add("@UserName", SqlDbType.NVarChar, 256).Value = rider.UserName;
cmd.Parameters.Add("@users_Id", SqlDbType.NVarChar, 128).Value = rider.userID;
...