Нарушение ограничения PRIMARY KEY 'PK_EMPLOYEE'.Невозможно вставить дубликат ключа в объект - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь обновить запись, но она показывает, что «нарушение ограничения первичного ключа не может вставить дубликат ключа в объект / таблицу».Эта ошибка звучит как «ADD EMPLOYEE block» вызывается при обновлении записи.

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

static public void UpdateEmployee(Employee employee)
{
    String conString = ConfigurationManager.ConnectionStrings["EMPLOYES"].ConnectionString;

    SqlConnection conn = new SqlConnection(conString);
    using (conn)
    {
        SqlCommand cmd = new SqlCommand("UpdateEmployeeRecord", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@EmployeeID", SqlDbType.NVarChar, 8).Value = employee.EmployeeID;
        cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 50).Value = employee.FirstName;
        cmd.Parameters.Add("@LastNmae", SqlDbType.NVarChar, 50).Value =     employee.LastName;
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = employee.Email;
        cmd.Parameters.Add("@Telephone", SqlDbType.NVarChar, 50).Value = employee.Telephone;

        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

static public void AddEmployee(Employee employee)
{
    String conString = ConfigurationManager.ConnectionStrings["EMPLOYES"].ConnectionString;

    SqlConnection conn = new SqlConnection(conString);
    using (conn)
    {
        SqlCommand cmd = new SqlCommand("AddNewEmployee", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@EmployeeID", SqlDbType.NVarChar, 8).Value = employee.EmployeeID;
        cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar, 50).Value = employee.FirstName;
        cmd.Parameters.Add("@LastNmae", SqlDbType.NVarChar, 50).Value = employee.LastName;
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = employee.Email;
        cmd.Parameters.Add("@Telephone", SqlDbType.NVarChar, 50).Value = employee.Telephone;

        conn.Open();
        cmd.ExecuteNonQuery(); //(X) Exception is here
        }
    }

Используемая процедура

ALTER PROCEDURE [dbo].[UpdateEmployeeRecord]
(
    @EmployeeID NVARCHAR(8),@FirstName  NVARCHAR(50),
@LastNmae NVARCHAR(50),@Email NVARCHAR(50),
@Telephone Nvarchar(50)
)
AS
BEGIN
    UPDATE [DBO].[EMPLOYEE] SET  FirstName = @FirstName,
            LastName = @LastNmae, Email = @Email, Telephone = @Telephone
        WHERE EmployeeID = @EmployeeID 
    END 

Я ожидаю, что запись будет обновлена, но это является своего рода нарушением ограничений первичного ключа.

1 Ответ

0 голосов
/ 06 февраля 2019

В процедуре @LastNmae используется ошибка @LastName, но не влияет

...