Вернуть идентификатор новой вставленной строки в базе данных PostgreSQL, используя C# и Npg sql? - PullRequest
0 голосов
/ 06 апреля 2020

Я строю проект WinForms в C# с использованием базы данных PostgreSQL и каркаса Npg sql.

Для вставки записи мне нужно вернуть идентификатор новой записи. Этот вопрос SO говорит о добавлении SELECT SCOPE_IDENTITY() к строке запроса, передаваемой в cmd. Таким образом, моя строка запроса выглядит следующим образом:

string insertString = "INSERT INTO sometable (company_name, category, old_value, old_desc, new_value, new_desc, reference1, reference2) VALUES (@comp, @cat, @oldValue, @oldDesc, @newValue, @newDesc, @ref1, @ref2); SELECT SCOPE_IDENTITY();";

, а затем получить идентификатор с чем-то вроде

int modified = cmd.ExecuteNonQuery();

Но это, вероятно, SQL Спецификация сервера c. Если я использую этот метод, я получаю исключение в вышеприведенной строке, говорящее: «fuction scope_identity () не существует».

Я не смог найти ничего, что могло бы решить эту проблему на Npg sql документация .

По связанному вопросу SO и предложениям Дениса я попытался добавить и

RETURNING id;

и

CURRVAL(pg_get_serial_sequence('my_tbl_name','id_col_name'))

в строка запроса, заменив SELECT SCOPE_IDENTITY(); на эти операторы в коде выше. В обоих случаях они работают как положено в DBeaver на вставке, но в моем C# коде в моем проекте WinForm значение «1» было изменено.

ПРИМЕЧАНИЕ. Я переименовал вопрос и добавил еще информация о том, что я сделал.

...