PostgreSql NPGSL 重复主键

PostgreSql NPGSL Duplicate Primary Key

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

PS。无法使用 AutoIncrement 列。

编辑:

        try
        {
            command = new NpgsqlCommand(strQuery, conn);
            if (command.ExecuteNonQuery() > 0)
                return true;
            else
                return false;
        }
        catch(Exception ex)
        {
            return false;
        }

其中 strQuery 是命令文本。例如。我的table已经有主键值1了,那我就特意再插入一个1作为主键。你如何引发异常?

当 return 值为 false 时。我会抛出异常。但它在 ExecuteNonQuery 中冻结。

Npgsql 正确地抛出带有 PostgreSQL error 23505 的 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 版本以及显示问题的完整、可运行的控制台程序(就像我在上面的片段中所做的那样)。