猿问

PostgreSql NPGSL 重复主键

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


附注。不能使用 AutoIncrement 列。


编辑:


        try

        {

            command = new NpgsqlCommand(strQuery, conn);

            if (command.ExecuteNonQuery() > 0)

                return true;

            else

                return false;

        }

        catch(Exception ex)

        {

            return false;

        }

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


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


繁花不似锦
浏览 404回答 1
1回答

浮云间

Npgsql 正确抛出 PostgresException 与PostgreSQL 错误 23505(重复键值违反唯一约束),下面是一些显示它的代码: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 版本以及显示问题的完整、可运行的控制台程序(就像我在上面的片段中所做的那样)。
随时随地看视频慕课网APP
我要回答