如何在 postgres sql 的插入查询中返回自动生成的 id
本文关键字:返回 自动生成 id 查询 插入 postgres sql | 更新日期: 2023-09-27 17:55:51
我有一个表,这是我表的脚本:-
CREATE TABLE news
(
news_id bigint NOT NULL DEFAULT nextval('news_seq'::regclass),
title character varying(1024),
description character varying(2024),
CONSTRAINT pk_news_newsid PRIMARY KEY (news_id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE news OWNER TO viewer;
现在我想在表中插入新记录时获取自动生成的news_id
。
这是用于插入新闻的 C# 函数:-
public Int64 AddNews(News newNews)
{
string query = string.Empty;
try
{
string dateFormat = ConfigurationManager.AppSettings["DateFormat"];
NpgsqlParameter[] parm = new NpgsqlParameter[2];
parm[0] = new NpgsqlParameter("title", newNews.NewsTitle);
parm[1] = new NpgsqlParameter("des", newNews.NewsDescription);
query = @" INSERT INTO news(title, description)
VALUES (:title, :des)
Returning news_id";
int id=NpgSqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, query, parm);
return id;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
On executing this function I always get the -1 value
提前致谢
在 pgAdmin 上执行以下查询时给出正确的结果:
INSERT INTO news(title, description)
VALUES ('title','description')
Returning news_id
您是否尝试过 NpgsqlCommand.ExecuteScalar 或您正在使用的 API 的等效方法?
我看到两种可能性:
1) -1 值表示您遇到回滚情况。 执行函数时,请检查表:是成功插入记录还是其他情况导致回滚? 如果是这样,请找到导致回滚的原因(请参阅 #2)。
2) 如果您正在运行非插入语句,也可以返回 -1 值。 我知道您正在运行插入,但是此表上的任何触发器呢? 您是否在触发器中执行任何 Select 语句?
希望这有帮助。