📅  最后修改于: 2023-12-03 14:59:40.875000             🧑  作者: Mango
在使用 C# 连接 SQL 数据库时,可能会遇到重复键异常。这通常发生在插入或修改数据时,由于与数据库中已有的记录具有相同的键值,导致插入或修改操作失败。
重复键异常通常会抛出 System.Data.SqlClient.SqlException
异常。在捕获异常后,可以根据异常信息提供的具体错误代码来判断是哪种类型的重复键异常,如下所示:
try
{
// 执行插入或修改操作
}
catch (SqlException ex)
{
if (ex.Number == 2601 || ex.Number == 2627) // 重复键异常代码
{
// 处理重复键异常
}
else
{
// 其他异常处理
}
}
其中,2601 和 2627 都是重复键异常的错误代码,分别代表唯一约束和主键约束引发的异常。
当遇到重复键异常时,可以根据具体情况进行以下处理:
以下示例代码演示如何通过使用 try-catch
语句捕获重复键异常,并根据异常类型进行特定处理。
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("INSERT INTO Persons (PersonID, LastName, FirstName) VALUES (@PersonID, @LastName, @FirstName);", connection);
command.Parameters.AddWithValue("@PersonID", 1);
command.Parameters.AddWithValue("@LastName", "Smith");
command.Parameters.AddWithValue("@FirstName", "John");
int result = command.ExecuteNonQuery();
Console.WriteLine("插入成功,受影响的行数:{0}", result);
}
}
catch (SqlException ex)
{
if (ex.Number == 2601 || ex.Number == 2627)
{
Console.WriteLine("插入失败,已经存在该记录!");
}
else
{
Console.WriteLine("出现异常:{0}", ex.Message);
}
}
在上述示例中,我们使用 SqlCommand
对象执行一个插入语句,向 Persons
表中插入一条记录。如果执行成功,将输出受影响的行数;如果遇到重复键异常,将输出插入失败的提示信息。