为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSql NPGSL 重复主键

PostgreSql NPGSL 重复主键

C#
繁花不似锦 2021-06-12 15:06:12
当故意插入重复的主键时,如何在 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 中冻结。
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-06-27
  • 1 回答
  • 0 关注
  • 261 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信