【发布时间】:2019-02-05 11:30:05
【问题描述】:
我正在尝试更新记录,但它显示“违反主键约束,无法在对象/表中插入重复键”。 这个错误听起来像是在我更新记录时调用了“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
我希望记录会被更新,但它违反了主键约束。
【问题讨论】:
-
听起来你的父代码调用了错误的方法。
-
不,它有效!但是如果有主键我无法更新记录,在删除主键时它会以另一条新记录的形式给我更新!
-
如果您只是从 SSMS 手动运行存储过程会发生什么?
-
@spodger 在 ssms 中工作
-
那么请尝试调试您的代码并确保它调用了正确的方法,因为这听起来不正确。
标签: c# ado.net sql-server-2014-express