Основная проблема вашего запроса заключается в том, что наличие этого определения параметра:
sqlCmd.Parameters.AddWithValue("@UserName", (AdminBook.Rows[e.RowIndex].FindControl("txtUserName") as TextBox).Text.Trim());
, которого нет в строке запроса, в котором 7 параметров вместо 8, определенных cmd.Parameters.Add()
:
UPDATE Users SET FirstName=@FirstName,LastName=@LastName,UserPass=@UserPass,Gender=@Gender,Birthday=@Birthday,Email=@Email WHERE UserID=@id
Обратите внимание, что OLE DB не распознает именованные параметры, а только позиционные параметры (вместо этого параметры запроса обрабатываются в порядке их определения).При текущем порядке в вашем коде параметр UserName
может быть ошибочно назначен как id
, и поскольку предоставленное значение не совпадает ни с одним из значений, хранящихся в столбце UserID
, данные не обновляются.
СледовательноВы должны удалить указанную выше строку, чтобы параметры запроса точно соответствовали их порядку, присутствующему в строке запроса:
string query = "UPDATE Users SET FirstName=@FirstName,LastName=@LastName,UserPass=@UserPass,Gender=@Gender,Birthday=@Birthday,Email=@Email WHERE UserID=@id";
OleDbCommand sqlCmd = new OleDbCommand(query, sqlCon);
sqlCmd.Parameters.AddWithValue("@FirstName", (AdminBook.Rows[e.RowIndex].FindControl("txtFirstName") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@LastName", (AdminBook.Rows[e.RowIndex].FindControl("txtLastName") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@UserPass", (AdminBook.Rows[e.RowIndex].FindControl("txtUserPass") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@Gender", (AdminBook.Rows[e.RowIndex].FindControl("txtGender") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@Birthday", (AdminBook.Rows[e.RowIndex].FindControl("txtBirthday") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@Email", (AdminBook.Rows[e.RowIndex].FindControl("txtEmail") as TextBox).Text.Trim());
sqlCmd.Parameters.AddWithValue("@id", Convert.ToInt32(AdminBook.DataKeys[e.RowIndex].Value.ToString()));
Или добавить столбец UserName
перед предложением WHERE
без изменения порядка параметров:
string query = "UPDATE Users SET FirstName=@FirstName,LastName=@LastName,UserPass=@UserPass,Gender=@Gender,Birthday=@Birthday,Email=@Email,
UserName=@UserName WHERE UserID=@id";