PostgreSql NPGSL Дубликат первичного ключа - PullRequest
0 голосов
/ 22 мая 2018

Как вы можете вернуть ошибку или вызвать исключение при выполнении ExecuteNonQuery в NPGSQL при преднамеренной вставке дублированного первичного ключа.При исполнении просто зависает и ничего не происходит.Я пытался окружить код Try Catch, но он все еще зависает в ExecuteNonQuery.

PS.Не могу использовать столбец автоинкремента.

РЕДАКТИРОВАТЬ:

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

, где strQuery - текст команды.Например, моя таблица уже имеет значение первичного ключа 1. Затем я намеренно вставлю еще 1 в качестве первичного ключа.Как вы вызываете исключение en?

Когда возвращаемое значение равно false.Я брошу исключение.Но он зависает в ExecuteNonQuery.

1 Ответ

0 голосов
/ 22 мая 2018

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 вы используете, и полную, работающую консольную программу, показывающую проблему (как я это делал во фрагменте выше).

...