обновление данных в базе данных с использованием asp.net (хранится в виде сетки) - PullRequest
0 голосов
/ 31 марта 2019

У меня есть сетка, содержащая сведения о сотруднике.У меня есть кнопка «Изменить».Нажав, он должен обновить запись.Но в этом коде вместо обновления создается новая запись.

Но вместо обновления добавляется новая запись.

protected void LinkButtonEdit_Click(object sender, EventArgs e)
{
       using (GridViewRow row = (GridViewRow)((LinkButton)sender).Parent.Parent)
       {
           textBoxNameInput.Text = row.Cells[0].Text;
           HiddenEmployeeName.Value= row.Cells[0].Text;
           textBoxSalaryInput.Text = row.Cells[1].Text;
           HiddenSalary.Value = row.Cells[1].Text;
           textBoxDOJInput.Text = row.Cells[2].Text;
           HiddenDOJ.Value = row.Cells[2].Text;
           var textToFind = row.Cells[3].Text;

           DropDownListDepartment.Items.FindByText(textToFind).Selected = true;
           DropDownListDepartment.ClearSelection();

           HiddenDepartmentName.Value = textToFind;
       }

       ModalPopupExtender1.Show();
   }

   protected void Update_Btn_Click(object sender, EventArgs e)
   {
        var deptID = getDeptId(HiddenDepartmentName.Value);
        float Salary = float.Parse(HiddenSalary.Value);
        // string DateOfJoining = HiddenDOJ.Value;
        //  DateTime dateVal = Convert.ToDateTime(DateOfJoining,
        //System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);
        int EmployeeID = getEmployeeID(HiddenEmployeeName.Value, Salary, deptID);

        using (SqlConnection con = new SqlConnection(conStr))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            string EmployeeName = textBoxNameInput.Text;
            float SalaryUpadate = float.Parse(textBoxSalaryInput.Text);
            string DepartmentName = DropDownListDepartment.Text;
            int DepartmentID = getDeptId(DepartmentName);

            // DateTime DateOfJoining = Convert.ToDateTime(DOJ_Text.Text);
            // string DateOfJoiningUpdate = EditDOJ_Text.Text;
            //     DateTime dateValUpdate = Convert.ToDateTime(DateOfJoiningUpdate,
            //  System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);

            con.Open();
            cmd.CommandText = "UPDATE EMPLOYEE SET EmployeeName = @EmployeeName, SALARY = @Salary, DEPARTMENTID = @DepartmentID WHERE EMPLOYEEID = @EmployeeID";
            cmd.Parameters.AddWithValue("@EmployeeName", EmployeeName);
            cmd.Parameters.AddWithValue("@DepartmentId", DepartmentID);

            cmd.ExecuteNonQuery();
        }
    }

    public int getEmployeeID(string updateEmpolyeeName, float updateSalary, int deptID)
    {
        int EmpId = 0;

        using (SqlConnection con = new SqlConnection(conStr))
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            con.Open();

            SqlDataReader rd;
            cmd.CommandText = "Select EmployeeId from Employee where EmployeeName='" + updateEmpolyeeName + "'and salary='" + updateSalary + "'and departmentId='" + deptID + "'";

            rd = cmd.ExecuteReader();

            while (rd.Read())
            {
                EmpId = Int32.Parse(rd.GetValue(0).ToString());
            }
        }
        return EmpId;
    }

1 Ответ

0 голосов
/ 31 марта 2019

Одна вещь, которую я заметил, это то, что у вас нет параметра для @EmployeeID здесь

    con.Open();
    cmd.CommandText = "UPDATE EMPLOYEE SET EmployeeName = @EmployeeName, SALARY = @Salary, DEPARTMENTID = @DepartmentID WHERE EMPLOYEEID = @EmployeeID";
    cmd.Parameters.AddWithValue("@EmployeeName", EmployeeName);
    cmd.Parameters.AddWithValue("@DepartmentId", DepartmentID);
    cmd.ExecuteNonQuery(); 

Еще одна вещь, которую я укажу, заключается в том, что в вашей функции getEmployeeID () ... вы получаете EmployeeID на основе имени, продажи, отдела ... Нет гарантии, что эти поля будут уникальными. Поместите фактический идентификатор сотрудника в сетку и используйте его в качестве ключа.

Почему вы вставляете запись вместо обновления? Я не вижу никакого возможного способа, чтобы Update_Btn_Click () вставил запись. Я бы поставил точку останова и убедился, что это исполняемый код.

Вы можете скрыть EmployeeID следующим образом:

<asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False" ReadOnly="True">
    <HeaderStyle CssClass="hide" Width="0px" HorizontalAlign="Center" />
    <ItemStyle CssClass="hide" Width="0px" HorizontalAlign="Center" />
</asp:BoundField>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...