Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PostgreSql NPGSL重复主键_C#_Postgresql_Npgsql - Fatal编程技术网

C# PostgreSql NPGSL重复主键

C# PostgreSql NPGSL重复主键,c#,postgresql,npgsql,C#,Postgresql,Npgsql,当故意插入重复的主键时,在NPGSQL中执行ExecuteOnQuery时,如何返回错误或引发异常。在执行时,它只是冻结,什么也没有发生。我试着用Try-Catch来包围代码,但它仍然在ExecuteNonQuery中冻结 注:不能使用自动增量列 编辑: 其中strQuery是命令文本。例如,我的表已经有主键值1。然后我会故意插入另一个1作为主键。您如何提出en例外 当返回值为false时。我将抛出一个异常。但它在ExecuteOnQuery中冻结。Npgsql正确地抛出了一个带有的Postgr

当故意插入重复的主键时,在NPGSQL中执行ExecuteOnQuery时,如何返回错误或引发异常。在执行时,它只是冻结,什么也没有发生。我试着用Try-Catch来包围代码,但它仍然在ExecuteNonQuery中冻结

注:不能使用自动增量列

编辑:

其中strQuery是命令文本。例如,我的表已经有主键值1。然后我会故意插入另一个1作为主键。您如何提出en例外


当返回值为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();
}