C# PostgreSql NPGSL重复主键
当故意插入重复的主键时,在NPGSQL中执行ExecuteOnQuery时,如何返回错误或引发异常。在执行时,它只是冻结,什么也没有发生。我试着用Try-Catch来包围代码,但它仍然在ExecuteNonQuery中冻结 注:不能使用自动增量列 编辑: 其中strQuery是命令文本。例如,我的表已经有主键值1。然后我会故意插入另一个1作为主键。您如何提出en例外C# PostgreSql NPGSL重复主键,c#,postgresql,npgsql,C#,Postgresql,Npgsql,当故意插入重复的主键时,在NPGSQL中执行ExecuteOnQuery时,如何返回错误或引发异常。在执行时,它只是冻结,什么也没有发生。我试着用Try-Catch来包围代码,但它仍然在ExecuteNonQuery中冻结 注:不能使用自动增量列 编辑: 其中strQuery是命令文本。例如,我的表已经有主键值1。然后我会故意插入另一个1作为主键。您如何提出en例外 当返回值为false时。我将抛出一个异常。但它在ExecuteOnQuery中冻结。Npgsql正确地抛出了一个带有的Postgr
当返回值为false时。我将抛出一个异常。但它在ExecuteOnQuery中冻结。Npgsql正确地抛出了一个带有的PostgresException(重复键值违反了唯一约束),下面是一些代码:
using (var conn = OpenConnection())
{
using (var cmd = new NpgsqlCommand("CREATE TABLE foo (id INT PRIMARY KEY)", conn))
cmd.ExecuteNonQuery();
using (var cmd = new NpgsqlCommand("INSERT INTO foo (id) VALUES (1)", conn))
cmd.ExecuteNonQuery();
using (var cmd = new NpgsqlCommand("INSERT INTO foo (id) VALUES (1)", conn))
cmd.ExecuteNonQuery();
}
问题可能在您的代码中。如果您仍然认为存在问题,请提交一个完整的示例,包括您正在使用的Npgsql版本,以及一个完整的、可运行的控制台程序来显示问题(就像我在上面的片段中所做的那样)。@mjwills请参阅更新。已解决问题。显然,项目中使用的版本是2.x.x。谢谢如果您没有提到使用了哪个版本的Npgsql,我就不会费心检查它了。
using (var conn = OpenConnection())
{
using (var cmd = new NpgsqlCommand("CREATE TABLE foo (id INT PRIMARY KEY)", conn))
cmd.ExecuteNonQuery();
using (var cmd = new NpgsqlCommand("INSERT INTO foo (id) VALUES (1)", conn))
cmd.ExecuteNonQuery();
using (var cmd = new NpgsqlCommand("INSERT INTO foo (id) VALUES (1)", conn))
cmd.ExecuteNonQuery();
}