Я пытаюсь обновить запись, но она показывает, что «нарушение ограничения первичного ключа не может вставить дубликат ключа в объект / таблицу».Эта ошибка звучит как «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
Я ожидаю, что запись будет обновлена, но это является своего рода нарушением ограничений первичного ключа.