如何在postgresql中的insert查询中返回自动生成的id

时间:2013-01-25 11:46:54

标签: c# postgresql-9.1

我有一张桌子。这是我桌子的脚本: -

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

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用NpgsqlCommand.ExecuteScalar或等效API?

答案 1 :(得分:1)

我看到两种可能性:

1)-1值表示您正在遇到回滚情况。执行该函数时,请检查表:记录是否成功插入或其他情况是否导致回滚?如果是这样,找到导致回滚的原因(参见#2)。

2)如果运行非insert语句,也可以返回-1值。我意识到你正在运行一个插件,但是这张桌子上的TRIGGERS怎么样?你在触发器中做了任何Select语句吗?

希望这有帮助。